• Java day 9


    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:
    ;
     (2)linux:
    ;
     (3)mac:
      *数据的追加写入: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();
    }
    

    }

  • 相关阅读:
    外媒曝Snapchat“被追”全过程:腾讯最先出手 脸书谷歌跟风
    Instagram
    阅后即焚
    Snapchat
    WhatsApp
    Facebook
    优酷网Youku
    土豆网与Youtube比较
    土豆网
    YouTube
  • 原文地址:https://www.cnblogs.com/cqxljj/p/10214473.html
Copyright © 2020-2023  润新知