Java-IO流之字符流操作

230 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

文件的写入

    //1File类的实例化
    File file = new File("hello.txt");
    //2.提供FileWriter的对象,用于数据的写出
    FileWriter fw=new FileWriter(file);
    fw.write("hello world!\n");
    fw.write("xitu");
    //资源的关闭
    fw.close();
  • 输出操作,对应的File可以不存在,并不会报异常
  • File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。
  • File对应的硬盘中的文件如果存在:
  • 如果流使用的构造器是FileWriter(file,false)/FileWriter(file):对原有文件覆盖
  • 如果流使用的构造器是:FileWriter(file.true):不会对原有文件覆盖,而是在原有文件后追加内容

文件的写出

//1File类的实例化
File file = new File("hello.txt");
File data=new File("hello2.txt");
//2.创建输入流和输出流的对象
FileReader fr=new FileReader(file);
FileWriter fw=new FileWriter(data);
//3.数据的读入和写出操作
char[] cubf=new char[5];
int len;//记录每次读入到cubf数组中的字符的个数
while ((len=fr.read(cubf)) !=-1){
    //每次写出len个字符
    fw.write(cubf,0,len);
}
fw.close();
  • 如果是图片/视频的话不能用字符流进行处理

使用字节流读入文件

//1File类的实例化
File file = new File("hello.txt");
//2.造流
FileInputStream fis=new FileInputStream(file);
//3.读数据
byte[] butter=new byte[5];
int len;
while ((len=fis.read(butter))!=-1){
    String str=new String(butter,0,len);
    System.out.print(str);
}
  • 使用字节流FileInputStream处理文本是可能出现乱码的

OutputStream & Writer

OutputStream 和 Writer 也非常相似:

  • void write(int b/int c);
  • void write(byte[] b/char[] cbuf);
  • void write(byte[] b/char[] buff, int off, int len);
  • void flush();
  • void close(); 需要先刷新,再关闭此流
  • 因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来替换字符数组,即以 String 对象作为参数
  • void write(String str);
  • void write(String str, int off, int len);
  • FileOutputStream 从文件系统中的某个文件中获得输出字节。FileOutputStream 用于写出非文本数据之类的原始字节流。要写出字符流,需要使用 FileWriter