欢迎光临散文网 会员登陆 & 注册

java文件字符流和字符缓冲流

2022-08-21 09:46 作者:虚云幻仙  | 我要投稿

/**
* 测试文件字符流FileReader/FileWriter
*/

public class TestFileRW {
   public static void main(String[] args) {
       try (FileReader fr = new FileReader("iostream/testFile.txt");
            FileWriter fw = new FileWriter("iostream/testFile2.txt")){
           //字符流以字符为单位读写数据
           for (int i = fr.read();i!=-1;i = fr.read()){
               //.read()返回int在0-65535之间,对应unicode字符集,读完返回-1
               fw.write(i);
               //.write(int)一次写入16位/2byte二进制数
           }
           fw.flush();
       }catch (Exception e ){
           e.printStackTrace();
       }

       try(FileWriter fw = new FileWriter("iostream/testFile2.txt",true)){
           //FileWriter在实例化时会对指定路径的文件进行覆盖,如果没有该文件会新建,如果有会覆盖成新的空文件,而第二个参数boolean append 为true时会在原文件的后面续写内容,不破坏原始内容,如果没有该文件也会新建
           fw.write(".write()方法可以直接写入字符串\r\n");
           //字符串中换行使用\r\n回车符+换行符完成
           fw.flush();
       }catch (Exception e ){
           e.printStackTrace();
       }

       try(FileReader fr = new FileReader("iostream/testFile2.txt");
           FileWriter fw = new FileWriter("iostream/testFile3.txt")){
           char buffer[] = new char[1024];
           //使用缓冲减少写入方法调用频率,字符流的缓冲的类型为char[]
           //字符流中没有.available()方法估算长度

           for (int len = fr.read(buffer);len!=-1;len = fr.read(buffer)){
               //.read(char[])返回读取到的字符长度
               fw.write(buffer,0,len);
               //和字节输出流类似,传入数组、偏移量、长度
           }
           fw.flush();
       }catch (Exception e){
           e.printStackTrace();
       }

       try(FileWriter fw = new FileWriter("iostream/testFile3.txt");
           BufferedWriter bw = new BufferedWriter(fw)){
           //BufferedWriter字符缓冲流,处理流,对节点流进行包装,提供缓冲
           bw.write("write方法没有变化");
           bw.write("不使用换行时这句话和上一句在同一行");
           bw.newLine();
           bw.write("使用newLine方法实现换行");
           bw.flush();
       }catch (Exception e){
           e.printStackTrace();
       }

       try(FileReader fr = new FileReader("iostream/testFile3.txt");
           BufferedReader br = new BufferedReader(fr)){
           System.out.println(br.readLine());
           //.readLine()方法一次读取一行,一行读完结尾不包含\r\n
       }catch (Exception e){
           e.printStackTrace();
       }

       try(BufferedReader br = new BufferedReader(new FileReader("iostream/testFile3.txt"));
           BufferedWriter bw = new BufferedWriter(new FileWriter("iostream/testFile4.txt"))){
           int num=1;
           for (String line = br.readLine();line!=null;line = br.readLine()){
               //当内容读完.readLine()返回空
               bw.write(num+".\t"+line);
               bw.newLine();
               //.readLine()方法读取的字符串不包含\r\n,在写入时需要加.newLine()方法换行
               num++;
               //行号
           }
           bw.flush();
       }catch (Exception e){
           e.printStackTrace();
       }

   }
}

java文件字符流和字符缓冲流的评论 (共 条)

分享到微博请遵守国家法律