java学习第20天--IO3--综合练习题集锦

IO流 综合练习

使用缓冲字符流复制文本文件
package com.czz.test01;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
 
public class BufferWriterDemo {
 
   public static void main(String[] args ) throws Exception {
      BufferedWriter bw = new BufferedWriter( new FileWriter( "niling.czz" ));
      BufferedReader br = new BufferedReader( new FileReader( "czz.txt" ));
     
      char [] chs = new char [1024];
      int len = 0;
      while (( len = br .read( chs )) != -1) {
         bw .write( chs , 0, len );
      }
     
      bw .close();
      br .close();
   }
}

使用9种方式复制文件
package com.czz.IO;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/*
 * 使用 9 种方式复制文件
 * */

public class Demo2 {
 
   public static void main(String[] args ) throws Exception {
      File file_src = new File( "czz.txt" );
      File file_dest = new File( "nl.txt" );
 
      long start = System. currentTimeMillis ();
//    copyFile1(file_src, file_dest);   //227
//    copyFile2(file_src, file_dest);   //86
//    copyFile3(file_src, file_dest);   //121
//    copyFile4(file_src, file_dest);   //94
//    copyFile5(file_src, file_dest);   //236
//    copyFile6(file_src, file_dest);   //102
//    copyFile7(file_src, file_dest);   //149
//    copyFile8(file_src, file_dest);   //10
      copyFile9 ( file_src , file_dest );   //139

      System. out .println(System. currentTimeMillis () - start );
   }
  
   // 抽象基类 ( 字符 字符形式 , 字节表示
   public static void copyFile1(File file_src ,File file_dest ) throws Exception {
      FileReader fr = new FileReader( file_src );
      FileWriter fw = new FileWriter( file_dest );
     
      int b = 0;
      while (( b = fr .read()) != -1) {
         fw .write( b );
      }
     
      fr .close();
      fw .close();
   }
 
   // 抽象基类 ( 字符 ) 字符形式 , 字符数组表示
   public static void copyFile2(File file_src ,File file_dest ) throws Exception {
      FileReader fr = new FileReader( file_src );
      FileWriter fw = new FileWriter( file_dest );
     
      char [] chs = new char [1024];
      int len = 0;
      while (( len = fr .read( chs )) != -1) {
         fw .write( chs , 0, len );
      }
     
      fr .close();
      fw .close();
   }
  
   // 缓冲流 ( 字符 )   缓冲区形式    字节表示
   public static void copyFile3(File file_src ,File file_dest ) throws Exception {
      BufferedReader br = new BufferedReader( new FileReader( file_src ));
      BufferedWriter bw = new BufferedWriter( new FileWriter( file_dest ));
     
      int b = 0;
      while (( b = br .read()) != -1) {
         bw .write( b );
      }
     
      br .close();
      bw .close();
   }
  
   // 缓冲流 ( 字符 )   缓冲区形式    字节数组表示
   public static void copyFile4(File file_src ,File file_dest ) throws Exception {
      BufferedReader br = new BufferedReader( new FileReader( file_src ));
      BufferedWriter bw = new BufferedWriter( new FileWriter( file_dest ));
     
      char [] chs = new char [1024];
      int len = 0;
      while (( len = br .read( chs )) != -1) {
         bw .write( chs , 0, len );;
      }
     
      br .close();
      bw .close();
   }
  
   // 转换流    字节流形式     字节表示
   public static void copyFile5(File file_src ,File file_dest ) throws Exception {
      InputStreamReader isr = new InputStreamReader( new FileInputStream( file_src ));
      OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream( file_dest ));
     
      int b = 0;
      while (( b = isr .read()) != -1) {
         osw .write( b );
      }
     
      isr .close();
      osw .close();
   }
  
   // 转换流    字节流形式     字节数组表示
   public static void copyFile6(File file_src ,File file_dest ) throws Exception {
      InputStreamReader isr = new InputStreamReader( new FileInputStream( file_src ));
      OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream( file_dest ));
     
      char [] chs = new char [1024];
      int len = 0;
      while (( len = isr .read( chs )) != -1) {
         osw .write( chs , 0, len );;
      }
     
      isr .close();
      osw .close();
   }
  
   // 缓冲流 ( 字节 )   缓冲字符流 字节表示
   public static void copyFile7(File file_src ,File file_dest ) throws Exception {
      BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file_src ));
      BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( file_dest ));
     
      int b = 0 ;
      while (( b = bis .read()) != -1) {
         bos .write( b );
      }
     
      bis .close();
      bos .close();
   }
 
   // 缓冲流 ( 字节 )    缓冲字符流   字节数组表示
   public static void copyFile8(File file_src ,File file_dest ) throws Exception {
      BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file_src ));
      BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( file_dest ));
     
      byte [] chs = new byte [1024];
      int len =0;
      while (( len = bis .read( chs )) != -1) {
         bos .write( chs , 0, len );
      }
     
      bis .close();
      bos .close();
   }
  
   // 读入行模式
   public static void copyFile9(File file_src , File file_dest ) throws Exception {
      BufferedReader br = new BufferedReader( new FileReader( file_src ));
      BufferedWriter bw = new BufferedWriter( new FileWriter( file_dest ));
     
      String line = null ;
      while (( line = br .readLine()) != null ) {
         bw .write( line );
         bw .newLine();
      }
     
      br .close();
      bw .close();
   }
}

ArrayList 中字符串存储到文本文件
思路:
1.ArrayList中存储的是字符串,泛型中应该使用的是String
2.创建字符输出流对象(文本文件,说明最好使用的是缓冲区字符流)
3.遍历集合,将元素写入到字符流中即可,最好添加换行
package com.czz.test03;
/*
 * ArrayList 中字符串存储到文本文件
   思路:
      1.ArrayList 中存储的是字符串,泛型中应该使用的是 String
      2. 创建字符输出流对象(文本文件,说明最好使用的是缓冲区字符流)
      3. 遍历集合,将元素写入到字符流中即可,最好添加换行
 * */
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;
 
public class ArrayListCopyDemo {
 
   public static void main(String[] args ) throws Exception {
      ArrayList<String> list = new ArrayList<>();
     
      list .add( "hello" );
      list .add( "world" );
     
      BufferedWriter bw = new BufferedWriter( new FileWriter( "czz.txt" ));
      for (String string : list ) {
         bw .write( string );
         bw .newLine();
      }
      bw .close();
   }
}
 

把一个文件中出现的数字排序,存储到一个sort.txt文本文件中,sort.txt中一个数字占一行
package com.czz.test03;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
/*
 * numbers.txt
 * 10 20     5   12
   8 6     33      7
   3
   99   25
 *
 *
 * 把文件中出现的数字排序 , 存储到一个 sort.txt 文本文件中
 */
public class ArrayListCopyDemo2 {
 
   public static void main(String[] args ) throws Exception {
      // 先读文件内容
      BufferedReader br = new BufferedReader( new FileReader( "numbers.txt" ));
     
      // 创建集合 , 以备将文件内容存入到集合
      ArrayList<Integer> list = new ArrayList<>();
     
      String line = null ;
      while (( line = br .readLine()) != null ){
         // 对数字进行切割 . 切割符为空格
         String[] numbers = line .split( " +" );
        
         // 遍历 , 将字符串数组中的数字全部转换为整型
         for (String num : numbers ) {
           
            //static int parseInt(String s)    将字符串参数作为有符号的十进制整数进行解析。
            list .add(Integer. parseInt ( num )); //parseInt() 函数可解析一个字符串 , 并返回一个整数
         }
      }
 
      br .close();
     
      Collections. sort ( list );  // 根据元素的自然顺序 对指定列表按升序进行排序。
        
      // 将内容写入到新的文件下
      BufferedWriter bw = new BufferedWriter( new FileWriter( "sort.txt" ));
     
      // 对集合进行遍历
      for (Integer i : list ) {
         // 将变量转换为字符串形式
         bw .write( i .toString());
         bw .newLine();
      }
      bw .close();
   }
}
 
 
从键盘上录入一个文本文件的路径,把它的内容输出到控制台
从键盘上录入源文件路径,目标文件路径,实现文本文件的复制
package com.czz.test03;
 
/*
 *  从键盘录入两个路径 , 一个作为源文件 , 一个作为目标文件 , 实现文本文件的复制
 * */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
 
public class ArrayListCopyDemo3 {
 
   public static void main(String[] args ) throws Exception {
      Scanner sc = new Scanner(System. in );
      System. out .println( " 请输入源文件路径 " );
      String src = sc .next();
 
      System. out .println( " 输入目标文件路径 :" );
      String dest = sc .next();
 
      BufferedReader br = new BufferedReader( new FileReader( src ));
      BufferedWriter bw = new BufferedWriter( new FileWriter( dest ));
 
      String line = null ;
      while (( line = br .readLine()) != null ) {
         bw .write( line );
         bw .newLine();
      }
      br .close();
      bw .close();
   }
}
 
 有一个文本文件:每行代表一个文本文件的路径,内容如下:
c:/hello.txt
c:/hello2.txt
c:/names.txt
c:/demo/a.txt

编程实现:将此文件中的所有路径代表的文件按顺序拷贝到一个汇总文件中:
格式如下:
文件名:c:/hello.txt 内容是:
...
文件名:c:/hello2.txt 内容是:
...

package com.czz.test03;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
 
/*
 * 将一个文本文件中的路径所代表的文件内容汇总到一个文件中
 */
 
public class ArrayListCopyDemo4 {
 
   public static void main(String[] args ) throws Exception {
      // 读文件内容
      BufferedReader br = new BufferedReader( new FileReader( "list.txt" ));
     
      // 汇总文件 FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
      BufferedWriter bw = new BufferedWriter( new FileWriter( "sum.txt" , true ));
     
      String path = null ;
      while (( path = br .readLine()) != null ){
         // 封装数据源
         BufferedReader br2 = new BufferedReader( new FileReader( path ));
         bw .write( path );
         bw .newLine();
         bw .write( "---------------------" );
         bw .newLine();
        
         copyFile ( br2 , bw );
         br2 .close();
      }
      br .close(); // 注意关闭的顺序
      bw .close(); // 注意关闭的顺序
 
   }
 
   private static void copyFile(BufferedReader br2 , BufferedWriter bw ) throws Exception {
      String line = null ;
      while (( line = br2 .readLine()) != null ){
         bw .write( line );
         bw .newLine();
      }
   }
}


把文本文件中的数据放入到集合中
分析:
1. 数据源是文本文件,考虑使用字符流(优先考虑 BufferedReader
2. 目的地是集合,并且元素是字符串,考虑使用 ArrayList
3. 读取文件的一行文本,添加到集合中
package com.czz.test03;
 
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
 
/*
 * 把文本文件中的数据放到集合中
 */
public class ArrayListCopyDemo5 {
   public static void main(String[] args ) throws Exception {
      BufferedReader br = new BufferedReader( new FileReader( "sum.txt" ));
      ArrayList<String> list = new ArrayList<>();
     
      String line = null ;
      while (( line = br .readLine()) != null ){
         list .add( line );
      }
     
      br .close();
     
//    System.out.println(list.size());
      for (String string : list ) {
         System. out .println( string );
      }
   }
}
 























































猜你喜欢

转载自blog.csdn.net/czz1141979570/article/details/80146490