版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hlx20080808/article/details/86064760
在java.io包中操作文件
1>按流向分:输入流和输出流
2>按处理数据分:字节流和字符流
2.1 字节流: InputStream,OutputStream 都是抽象类(处理字节或二进制对象)
2.2 字符流: Reader,Writer都是抽象类,(一个字符占两个字节)(处理字符或字符串)
3>流的处理如下:
File file =new File("test1.txt");
3.1>缓冲流 (小说)
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw);
3.2>数据流(二进制流) 音频,视频,图片
FileInputStream fis=new FileInputStream(file);
DataInputStream dis=new DataInputStream(fis);
3.3>对象流**
序列化是将对象的状态写入到特定的流中的过程 (写)
反序列化则是从特定的流中获取数据重新构建对象的过程 (读)
FileInputStream fos = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fos);
注意:解决读取时中文乱码:
(1)字符流+缓冲流==》不能解决
*(2)字节流转换成字符流+缓冲流==》解决
FileInputStream fis =new FileInputStream(file);
InputStreamReader reader=new InputStreamReader(fis,"gbk");
BufferedReader br=new BufferedReader(reader);)
读取时出现乱码问题:
java中提供了将字节流转为字符流的操作类,有也可以解决乱码问题:
public static void br2() {
File file=new File("Intel.txt");
try(
//字节输入流对象
FileInputStream fis =new FileInputStream(file);
// 将字节输入流转化成字符输入流,并设置编码格式gbk,InputStreamReader为 Reader 的子类
InputStreamReader reader=new InputStreamReader(fis,"gbk");
//缓冲流对象
BufferedReader br=new BufferedReader(reader);){
System.out.println("读取当前文件编码:"+reader.getEncoding());
String str="";
//遍历读取
while((str=br.readLine())!=null){
System.out.println(str);
}
}catch (Exception ex){
ex.printStackTrace();
}
}
效果: