字符型文件流
演示字节型文件输入流,读取中文可能会产生问题
在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();
}
}
}