Java之字符型文件流

字符型文件流

演示字节型文件输入流,读取中文可能会产生问题

在D盘中创建一个test文件夹,在test文件夹里面创建一个Test.txt文本文档。里面写入:
我bcdefg
hijklmn
opq

package readerandwriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class TestFileReader {
	public static void main(String[] args) {
		try {
			//演示字节型文件输入流    读取中文可能会产生问题
			FileInputStream fis = new FileInputStream("D://test//Test.txt");
			int code = fis.read();//"我"占16bit。字母占8bit,所以输出会出现错误。
			System.out.println(code);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

可以将上面9、10行换为以下代码

byte[] b = new byte[5];
int count = fis.read(b);
while(count != -1){
	System.out.println(new String(b,0,"GBK"));
	count = fis.read(b);
}

这样可以以5个字节为一组能够解决上述的问题,但是要是要是在第5个字节又是中文,那么又会产生错误,因此这样也有可能乱码的问题。

字节流好处在于什么类型的文件都可以处理,但是不好在于处理纯文本的文件可能会产生乱码的问题。

字符型输入流

	FileReader	    FileWriter
	只能操作纯文本文件(文件右键打开方式 记事本打开 能看懂)
	.txt 
FileReader
	    1.java.io包
		2.继承InputStreamReader   再继承Reader
		3.构造方法
		4.常用
			read()    读取一个字符或字节
			read(char[])  可以读取一个char数组

字符型文件流既可以输出字节,也可以输出字符。这样就不会产生读取中文产生问题

package readerandwriter;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class TestFileReader {
	public static void main(String[] args) {
		//创建一个字符型文件输入流
		try {
			File file = new File("D://test//Test.txt");
			FileReader fr = new FileReader(file);
			
			int code = fr.read();
			System.out.println(code);
		} catch (IOException e) {
			e.printStackTrace();
		}
	
	}
FileWriter
		1.java.io包
		2.继承 OutputStreamWriter  Writer
		3.构造方法
			带file参数   带file,boolean参数
			带String参数  带String,boolean参数
		4.常用
			write(int)    可以写一个字符或字节
			write(char[])   可以写一个char数组
			write(string)
			flush    close

		FileInputStream/FileOutputStream
		FileReader/FileWriter
		read	write
import java.io.*;

public class TestFileReader {
    public static void main(String[] args){
        try {
            //字符型文件输入流
            File file = new File("D://test//Test.txt");
            FileReader fr = new FileReader(file);
            String str = "abc";
            char[] c = str.toCharArray();
            FileWriter fw = new FileWriter(file);
            fw.write(97);
            fw.write(c);
            fw.write(str);
            fw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
发布了54 篇原创文章 · 获赞 17 · 访问量 2434

猜你喜欢

转载自blog.csdn.net/qq_44096670/article/details/104098981
今日推荐