IO文件读取以及解决中文乱码

一、读取文件内容的三种方式
1、文件的读取

主要介绍两种常用的读取方法。按行读取和按字符块读取。

1.1 一次读取一行作为输入

//按行读取文件内容
	public static String Read1(String infile)	throws Exception	//infile="data/in.txt"
	{
		StringBuffer sb = new StringBuffer();
		
		BufferedReader br = new BufferedReader(new FileReader(infile));
		String data = br.readLine();
		while(data != null)
		{
			sb.append(data+"\n");
			data = br.readLine();
		}
		br.close();
		return sb.toString();
	}

1.2 一次读取指定大小的字符块

关于一次读取一个字符的方法就不讲了,感觉这种方法效率太低了!

//以字符块读取文件
	public static String Read2(String infile) throws Exception
	{
		StringBuffer sb = new StringBuffer();
		
		File file = new File(infile);
		FileInputStream fis = new  FileInputStream(file);
		byte buffer[] = new byte[1024];
		int len = 0;
		while((len = fis.read(buffer)) != -1)
		{
			sb.append(new String(buffer, 0, len));
			//sb.append(new String(buffer, 0, len, "UTF-8"));	//将byte转String可以指定编码方式
		}
		fis.close();
		return sb.toString();
	}

2、文件的写入
关于文件的写入,主要有三种方法,分别使用FileWriter、FileOutputStream和BufferedOutputStream。

根据一个网友的测试结果,在这三种方法中,使用FileWriter速度最快,而使用FileOutputStream速度最慢。

2.1 使用FileWriter函数写入数据到文件

//性能最好
	public static void Write1(String file, String text) throws Exception
	{
		FileWriter fw = new FileWriter(file);
		fw.write(text, 0, text.length());		//fw.write(text)
		fw.close();
	}

2.2 使用FileOutputStream函数写入

//三种方法中性能最弱
	public static void Write2(String file, String text)	throws Exception
	{
		FileOutputStream fos = new FileOutputStream(file);
		fos.write(text.getBytes());
		fos.close();
		
		//PrintStream ps = new PrintStream(fos);
		//ps.print(text);
		//ps.append(text);
	}

2.3 使用BufferedOutputStream函数写入

//这三种方法中,性能中等
	public static void Write3(String file, String text)	throws Exception
	{
		BufferedOutputStream buff = new BufferedOutputStream(new FileOutputStream(file));
		buff.write(text.getBytes());
		buff.flush();
		buff.close();
	}

二、两种方式:解决中文乱码
为什么IO流读写中可能会出现乱码问题?
①这个字符编码不支持某种语言(ex:中文)
②编码和解码规则不一致
所以,解决方式如下:
1.利用”GBK”使字符编码支持中文的格式
System.out.print(new String(bytes,“GBK”));
2.转换流
出现中文乱码的原因,大多是编码和解码规则不一致,利用转换流可以有效地将字符转换成想要的结果。
(1)编码 : String —> byte[]
String中有对应的方法:
①:byte[] getBytes() : 使用平台的默认字符集将此 String编码为 byte 序列
②:byte[] getBytes(Charset charset) : 使用指定的字符编码来编码字符串
③:byte[] getBytes(String charsetName) : 使用指定的字符编码来编码字符串
(2)解码 : byte[] —> String
String中有对应的构造方法:
①:String(byte[] bytes) : 通过使用平台的默认字符集解码指定的 byte 数组
②:String(byte[] bytes, Charset charset) : 使用指定的字符集来解码指定的byte数组
③:String(byte[] bytes, String charsetName) : 使用指定的字符集来解码指定的byte数组

你可能感兴趣的:(IO文件读取以及解决中文乱码)