java读取文件内容(中文文件解决办法)

众所周知,java的中文问题一直是一个老大难的问题,这个现象能够在csdn中java论坛里关于中文乱码的提问率就能够了解到,甚至软件巨人IBM专门开辟了一个解决中文问题的专区,做为一个俗人(一直梦想但愿想金凯利那样成为一个“冒牌天神”,只是一直没有成功,也许是由于上帝不照顾中国吧),我也为赞成的问题困扰,好在今天解决了。 java

 

    随着我对.net平台的完全放弃(只是生活所迫,毕竟我还要生活),将原有的资源转到Java平台上来是我当前的一个重要任务之一,说到这里,不得不认可.net对中文问题解决的很好,虽然偶尔也会出现乱码。 数据库

 

    问题是这样的,个人box(http://www.ibeyond.org/box/)原来是使用asp.net写的(当时只是为了尝试新的技术),当时为了数据的可移植性我放弃了使用数据库,将所有数据保存为UTF-8编码的文本文件,在.net中读取这种文件秩序只要指定打开文件的编码方式,中文问题就能够避免。可是按照我之前的思惟,java中不是这么做的,java中都是先读取后转换的,最后的结果证实我错了,看来经验主意害死人呀。 asp.net

 

File f=new File((new BoxConfig()).getBaseDir()+"Data//"+request.getParameter("ID")+".inc"); eclipse

 

BufferedReader reader = new BufferedReader(new FileReader(f)); 编码

 

String line; spa

 

while((line=reader.readLine())!=null){ .net

 

  strContent+=line; ip

 

} 资源

 

这是我最初的代码f就是我要读取的UTF-8格式的文本文件,这一天中通过了无数次的尝试,包括new String(strContent.getBytes("UTF-8"))(其中尝试了N种编码转换),System.setProperty("file.encoding","UTF-8")(其中指定了N种编码转换),都失败了,其中甘苦相信各位经历过被程序折磨的各位看官都有所了解,在此略过。终于在Google中无数次查询中获得了一个后来被证实很重要的一条信息“读取文件时指定字符编码”,一语点醒梦中人,.net中不就是这么实现的吗?走了一圈弯路终于解决了这个问题。 get

 

File f = new File("E://eclipse//workspace//box//Data//2003-3-7-100.inc");

 

InputStreamReader read = new InputStreamReader (new FileInputStream(f),"UTF-8");

 

BufferedReader reader=new BufferedReader(read);

 

String line;

 

while ((line = reader.readLine()) != null) {

 

System.out.println(line);

 

}

 

经过打开文件是指定文件编码的方法把这个问题轻松的解决了。

 

  最后总结一下:java要读取数据流的时候必定要指定数据流的编码方式(至少读取String流的时候要这么做。