FileReader乱码

出现原因:FileReader读取文件的过程中,FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,所以FileReader只能按系统默认的字符集来解码,然后在UTF-8 -> GBK -> UTF-8的过程中编码出现损失,造成结果不能还原最初的字符。

/**
 * 获得文件内容
 * @param file
 * @return
*/
public String getFileContent(File file){

		InputStreamReader reader = null;
		StringBuffer result = new StringBuffer();
		try {
			reader = new InputStreamReader(new FileInputStream(file),"gbk");

			int ch = reader.read();
			while(ch != -1){
				result.append((char)ch);
				ch = reader.read();
			}
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
			reader = null;
		}
		return result.toString();
	}

FileReader和FileWriter的使用:可用于己知输入编码和输出编码情况下:

public List<String> getFileContent(){

		List<String> list = new ArrayList<String>();

		File f = null;
		BufferedReader buff = null;
		BufferedWriter out = null;
                StringBuffer buffer = new StringBuffer();
		try {
			f = new File("resource/domain0108.csv");
			buff = new BufferedWriter(new FileWriter(f));

			String temp = buff.readLine();
			while(true){
				if(temp == null){
					break;
				}
				/*byte[] bb = temp.getBytes("utf-8");
				temp = new String(bb,"gbk");*/
				list.add(temp + "\r\n");
                                buffer.append(temp + "\r\n");
				temp = buff.readLine();
			}
			System.out.println("InfoPorcesser.getFileContent返回文件内容列表成功"+list.size());
                        out.write(buffer.toString());
                        out.flush();
                        out.close();
			buff.close();
		} catch (Exception e) {
			e.printStackTrace();
			buff = null;
		}

		return list;
	}
时间: 2024-10-19 06:28:05

FileReader乱码的相关文章

FileReader读取中文txt文件编码丢失问题(乱码)(转)

有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=new String(str.getBytes(),"UTF-8");结果大部分中文显示正常,但最后仍有部分汉字显示为问号! public static List<String> getLines(String fileName){ List<String> lines=new ArrayList<String>(); try { BufferedRead

FileReader读取文件中文乱码问题

有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=newString(str.getBytes(),"UTF-8");结果大部分中文显示正常,但最后仍有部分汉字显示为问号! Java代码 public static List<String> getLines(String fileName){ List<String> lines=newArrayList<String>(); try { Buffere

理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,BufferedInputStream 和 BufferedOutputStream, BufferedReader 和 BufferedWriter,转换流

/* * 1.理解 "流" ? * 动态性.连续性.方向性. * * 2.在java语言中,将数据的输入/输出称之为 IO流. IO流的分类: * 1) 从方向分: 输入流 , 输出流. (参照计算机的内存) * 将数据送到内存中去称之为输入流.反之,称之为输出流. * * 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据). * * 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上). * * 3.在Java语言中,所有流类均来自

InputStreamReader 和FileReader的区别

InputStreamReader 和 BufferedReader .其中最重要的类是 InputStreamReader ,它是字节转换为字符的桥梁. 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等. FileReader 与 InputStreamReader 涉及编码转换 ( 指定编码方式或者采用 os 默认编码 ) ,可 能在不同的平台上出现乱码现象!而 FileInputStream 以二进制方式处理,不会出现乱码现象 . FileI

Java 中文乱码问题总结

开发java应用出现乱码是很常见的,毕竟现在unicode的使用还不是很广泛,在使用gb2312(包含了gbk简体,big5繁体)的系统中要正确 实现中文的display和数据库的存储是最基本的要求. 1,首先developer要明确自己为什么会遇到乱码,遇到什么样的乱码(无意义的符号还是一串问号或者其它什么东西). 新手遇到一堆很乱的字符时通常不知所措,最直接的反映就是打开google搜索“java中文”(这个字符串在搜索引擎上的查询频率非常高), 然后一个一个的去看别人的解决方法.这样做没有

解決BufferedReader读取UTF-8文件中文乱码(转)

读取txt文件乱码 Java代码 BufferedReader read = new BufferedReader(new FileReader(new File(filename))); 解决办法: Java代码 InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8"); BufferedReader read = new BufferedReader(isr); 因为Input

java FileReader/FileWriter读写文件

java FileReader/FileWriter读写字母和数字没问题,但读写汉字就乱码.记录下,后面找到解决方法再补上. public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; try { int a = 0; fr = new FileReader("c:/a.txt");//读取目标 fw = new FileWriter("c:/b.txt")

Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区

ava.io下面有两个抽象类:InputStream和Reader InputStream是表示字节输入流的所有类的超类Reader是用于读取字符流的抽象类InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别.即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组.弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明 InputStream    | __FileInputStre

Jsoup处理html空格乱码问题

由于在html中空格只能用 表示,当运用Jsoup抓取html页面后,我们将html页面进行解析时,Java对html页面的代码不识别,输入到控制台时出现乱码,在网上查了很多资料都没有找到很好的解决办法,最后在一篇论坛中说到"运用字符串替换"可以进行解决,于是运用简单的字符串替换原理对此进行处理.对其替换处理后再对html文件进行解析.具体实现代码如下: //参数说明:oldFile为所需要替换的文件,即为原文件: newFile为替换后新的文件 :oldString为所需要替换的字符