Java day 9

本文深入解析Java IO流的概念,包括输出流(FileWriter)和输入流(FileReader)的使用方法,以及缓冲流(BufferedWriter和BufferedReader)的高级功能。通过实例演示了如何进行数据读写、复制文本文件等操作。

1、IO流:用来处理设备之间的数据传输(文件复制,上传文件和下载文件)

2、IO流分类:

  (1)输出流(FileWriter):
         A、往文件中写数据,传递一个文件名称
            a、构造方法:FileWriter(String fileName)
            b、成员方法:void write(String str);void fiush();void close()
         B、输出流写数据的步骤:
            a、创建输出流对象;(调用系统资源创建了一个文件;创建输出流对象;把输出流对象指向文件)
            b、调用输出流对象的写数据的方法;
            c、释放资源
         C、FileWriter写数据的方法:
            a、void write(String str):写一个字符串数据
            b、void write(String str,int index,int len):写一个字符串中的一部分数据
            c、void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值,如'a',97
            d、void write(char[ ] chs):写一个字符数组数据
            e、void write(char[ ] chs,int index,int len):写一个字符数组数据的一部分数据
          例:
                 package com.itheima;
                 import java.io.FileWriter;
                 import java.io.IOException;
                 public class FileWriterTest {
                   public static void main(String[] args) throws IOException {
                         FileWriter fw=new FileWriter("b.txt");
                         //void write(String str):写一个字符串数据
                         fw.write("abcde");
                         //void write(String str,int index,int len):写一个字符串中的一部分数据
                         fw.write("abcde",0,5);
                        //void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值,如'a',97
                         fw.write('a');
                         fw.write(97);
                       //void write(char[] chs):写一个字符数组数据
                         char[] chs={'a','b','c','d','e'};
                         fw.write(chs);
                      //void write(char[] chs,int index,int len):写一个字符数组数据的一部分数据
                         fw.write(chs,2,3);
                      //释放资源
                         fw.close();
                  }

                 }
     注意:
        a、相对路径:相对当前项目而言的,在项目的根目录下(例:a.txt)
        b、绝对路径:以盘符开始的路径(例:d:\\ a.txt)
(2)输入流(FileReader):
      A、往文件中读数据到控制台,传递一个文件名称
         a、构造方法: FileReader(String fileName)
         b、成员方法:int read();int read(char[ ] cbuf):一次读一个字符数组的数据,返回的是实际读取字符的个数
           例:
             package com.itheima;
             import java.io.FileReader;
             import java.io.IOException;
             public class FileReaderDemo2 {
             public static void main(String[] args) throws IOException {
         //创建输入流对象
         FileReader fr=new FileReader("fr2.txt");
        //调用输入流对象的读数据方法
       //int read(char[] cbuf):一次读一个字符数组的数据,返回的是实际读取字符的个数
    /*
     * char[] chs=new char[5]; 
     * //第一次读数据 
     * int len=fr.read(chs);
     * System.out.println("len:"+len); 
     * System.out.println(new String(chs,0,len));
     * //第二次读数据 
     * len=fr.read(chs); 
     * System.out.println("len:"+len);
     * System.out.println(new String(chs,0,len)); 
     * //第三次读数据 
     * len=fr.read(chs);
     * System.out.println("len:"+len); 
     * System.out.println(new String(chs,0,len));
     */
       //char[] chs=new char[5];
       char[] chs=new char[1024];//这里可以是1024及其整数倍
               int len; //1、fr.read(chs);//2、len=fr.read(chs); //3、len!=-1 
               while((len=fr.read(chs))!=-1){
       System.out.println(new String(chs,0,len)); 
            }
    //释放资源
    fr.close();
           }
           }
    B、输入流读数据的步骤:
       a、创建输入流对象
       b、调用输入流对象的读数据的方法
       c、释放资源 
    注意:
      (1)读数据首先要看文件是否存在,如果报错java.io.FileNotFoundException: fr.txt (系统找不到指定的文件),则在该项目下创建一个file文件
      (2)读数据/写数据都要导入相应的包,并抛出异常
    *close()和flush()方法的区别:
      (1)flush():刷新缓冲区,流对象还可以继续使用;
      (2)close():先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用了

3、实现数据的换行:

 (1)windows:\r\n;
 (2)linux:\n;
 (3)mac:\r
  *数据的追加写入:FileWriter(String fileName,boolean append)

4、输入/输出缓冲流:

 (1)BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供各个字符、数组和字符串的高效写入
 (2)BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现各个字符、数组和行的高效读取
 (3)缓冲流读取数据的两种方式:
         a、一次读写一个字符:
          例:
                 int ch;
         while((ch=br.read())!=-1) { 
         System.out.print((char)ch); 
         }
         b、一次读写一个字符数组:
         例:
                char[] chs=new char[1024];
        int len;
        while((len=br.read(chs))!=-1) {
            System.out.print(new String (chs,0,len));
        }
       注意:在创建一个输出缓冲流对象时,后面一定要记得加new FileWriter,如:BufferedWriter bw=new BufferedWriter(new FileWriter("bw.txt"))

5、缓冲流的特殊功能:

 (1)BufferedWriter
             void newLine():写一个换行符,这个换行符由系统决定
 (2)BufferedReader
             String readLine():一次读取一行数据,但不读取换行符

6、复制文本文件的5种案例:

     package com.itheima;
     import java.io.BufferedReader;
     import java.io.BufferedWriter;
     import java.io.FileReader;
     import java.io.FileWriter;
     import java.io.IOException;
     public class CopyFileDemo {
       public static void main(String[] args) throws IOException {
        //创建输入流对象
    /*
     * FileReader fr=new FileReader("FileWriterDemo.java"); //创建输出流对象 FileWriter
     * fw=new FileWriter("Copy.java"); //一次读写一个字符数据 int ch;
     * while((ch=fr.read())!=-1){ fw.write(ch); }
     * 
     * //一次读写一个字符数组 char[] chs=new char[1024]; int len;
     * while((len=fr.read(chs))!=-1){ fw.write(chs,0,len); }
     * 
     * //释放资源 fw.close(); fr.close(); } }
     */
    

    /*
     * method1("FileWriterDemo.java","Copy.java");//需要修改5个地方
     * method2("FileWriterDemo.java","Copy.java");
     * method3("FileWriterDemo.java","Copy.java");
     * method4("FileWriterDemo.java","Copy.java");
     * method5("FileWriterDemo.java","Copy.java");
     */
     String srcFileName="FileWriterDemo.java";
     String destFileName="Copy.java";
     method1(srcFileName,destFileName);//只需要修改一个地方
     method2(srcFileName,destFileName);
     method3(srcFileName,destFileName);
     method4(srcFileName,destFileName);
     method5(srcFileName,destFileName);
    
      }
         //缓冲流:一次读写一个字符串
       public static void method5(String srcFileName,String destFileName) throws IOException {
                //创建输入缓冲流对象
           BufferedReader br=new BufferedReader(new FileReader(srcFileName)) ;
        //创建输出缓冲流对象
           BufferedWriter bw=new BufferedWriter(new FileWriter(destFileName)) ;
        //一次读写一个字符串
           String line;
        //1、br.readLine()
        //2、line=br.readLine()
        //3、line!=null
        while((line=br.readLine())!=null) {
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        //释放资源
          bw.close(); 
          br.close();
    }
         //缓冲流:一次读写一个字符数组
      public static void method4(String srcFileName,String destFileName) throws IOException {
             //创建输入缓冲流对象
          BufferedReader br=new BufferedReader(new FileReader(srcFileName)) ;
            //创建输出缓冲流对象
          BufferedWriter bw=new BufferedWriter(new FileWriter(destFileName)) ;
           //一次读写一个字符数组
          char[] chs=new char[1024]; 
          int len; 
          while((len=br.read(chs))!=-1){
          bw.write(chs,0,len);
           }
          //释放资源
         bw.close(); 
         br.close();
       }
          //缓冲流:一次读写一个字符
    public static void method3(String srcFileName,String destFileName) throws IOException {
        //创建输入缓冲流对象
        BufferedReader br=new BufferedReader(new FileReader(srcFileName)) ;
        //创建输出缓冲流对象
        BufferedWriter bw=new BufferedWriter(new FileWriter(destFileName)) ;
        //一次读写一个字符
         int ch;
         while((ch=br.read())!=-1){ 
                bw.write(ch);
          }
        //释放资源
          bw.close(); 
          br.close();
    }
               //基本流:一次读写一个字符数组
    public static void method2(String srcFileName,String destFileName) throws IOException {
        //创建输入流对象
        FileReader fr=new FileReader (srcFileName);
        //创建输出流对象
        FileWriter fw=new FileWriter(destFileName);
        //一次读写一个字符数组
         char[] chs=new char[1024]; 
         int len; 
         while((len=fr.read(chs))!=-1){
                fw.write(chs,0,len);
         }
        //释放资源
          fw.close(); 
          fr.close();
    }
              //基本流:一次读写一个字符
     public static void method1(String srcFileName,String destFileName) throws IOException {
       //创建输入流对象
    FileReader fr=new FileReader (srcFileName);
    //创建输出流对象
    FileWriter fw=new FileWriter(destFileName);
    //一次读写一个字符
     int ch;
     while((ch=fr.read())!=-1){ 
            fw.write(ch);
      }
    //释放资源
      fw.close(); 
      fr.close();
}

}

转载于:https://www.cnblogs.com/cqxljj/p/10214473.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值