1. 程式人生 > >文件IO操作學習筆記

文件IO操作學習筆記

reader contains nta 用戶輸入 main bytes NPU ava 關閉流

練習一:高效字節輸出流寫出字節數據

描述:利用高效字節輸出流往C盤下的d.txt文件輸出一個字節數。
答案
操作步驟:

  1. 創建字節輸出流對象關聯文件路徑
  2. 利用字節輸出流對象創建高效字節輸出流對象
  3. 調用高效字節輸出流對象的write方法寫出一個字節
  4. 關閉高效流,釋放資源。
    代碼:
    public class Test01_01 {
    public static void main(String[] args) throws IOException {
        // 創建字節輸出流FileOutputStream對象並指定文件路徑。
        FileOutputStream fos = new FileOutputStream("c:\\d.txt");
        // 利用字節輸出流創建高效字節輸出流對象
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 調用高效字節輸出流對象的write(int byte)方法寫出一個字節數據
        bos.write(97);
        // 關閉流
        bos.close();
    }
    }

    練習二:高效字節輸出流寫出字節數組數據

    描述:利用高效字節輸出流往C盤下的e.txt文件寫出一個字節數組數據,如寫出:”i love java”
    答案
    操作步驟:

  5. 創建字節輸出流對象關聯文件路徑
  6. 利用字節輸出流對象創建高效字節輸出流對象
  7. 定義字符串存放要輸出的數據,然後將字符串轉換為字節數組。
  8. 調用高效字節輸出流對象的write方法將字節數組輸出。
  9. 關閉高效流。
    代碼:
    public class Test01_02 {
    public static void main(String[] args) throws IOException {
        // 創建字節輸出流FileOutputStream對象並指定文件路徑。
        FileOutputStream fos = new FileOutputStream("c:\\e.txt");
        // 利用字節輸出流創建高效字節輸出流對象
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 調用高效字節輸出流對象的write(byte[] buff)方法寫出一個字節數據
        bos.write("i love java".getBytes());
        // 關閉流
        bos.close();
    }
    }

    練習三:高效流文件復制

    描述:利用高效字節輸入流和高效字節輸出流完成文件的復制。
    要求:
    1.將C盤下的c.png文件復制到D盤下
    2.一次讀寫一個字節數組方式復制
    答案
    操作步驟:

  10. 創建字節輸入流對象並關聯文件路徑
  11. 利用字節輸入流對象創建高效字節輸入流對象
  12. 創建字節輸出流對象並關聯文件路徑
  13. 利用字節輸出流對象創建高效字節輸出流對象
  14. 創建字節數組用來存放讀取的字節數
  15. 利用高效字節輸入流循環讀取文件數據,每讀取一個字節數組,利用高效字節輸出流對象將字節數組的內容輸出到目標文件中。直到讀取到文件末尾。
  16. 關閉高效流對象
    代碼:
    public class Test01_03 {
    public static void main(String[] args) throws IOException{
        // 創建字節輸入流對象並關聯文件路徑
        FileInputStream fis = new FileInputStream("c:\\c.png");
        // 利用字節輸出流對象創建高效字節輸出流對象
        BufferedInputStream bis = new BufferedInputStream(fis);
        // 創建字節輸出流對象並指定文件路徑。
        FileOutputStream fos = new FileOutputStream("d:\\c.png");
        // 利用字節輸出流創建高效字節輸出流對象
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 定義字節數組接收讀取的字節
        byte[] buffer = new byte[1024];
        // 定義變量接收讀取的字節數
        int len = -1;
        // 循環讀取圖片數據
        while((len = bis.read(buffer)) != -1) {
            // 每讀取一個字節的數據就寫出到目標文件中
            bos.write(buffer,0,len);
        }
        // 關閉流
        bis.close();
        bos.close();
    }
    }

    練習四:高效字符流和集合的綜合使用

    描述:
    分析以下需求,並用代碼實現
    實現一個驗證碼小程序,要求如下:

    1. 在項目根目錄下新建一個文件:data.txt,鍵盤錄入3個字符串驗證碼,並存入data.txt中,要求一個驗證碼占一行;
    2. 鍵盤錄入一個需要被校驗的驗證碼,如果輸入的驗證碼在data.txt中存在:在控制臺提示驗證成功,如果不存在控制臺提示驗證失敗
      答案代碼
      public class Test01_04 {
      public static void main(String[] args) throws Exception {
      //鍵盤錄入3個字符串並寫入項目根路徑下的data.txt文件中
      writeString2File();
      //驗證碼驗證
      verifyCode();
      }
      /**
      * 驗證碼驗證
      * @throws Exception 
      */
      private static void verifyCode() throws Exception {
      //創建ArrayList集合,用於存儲文件中的3個驗證碼
      ArrayList<String>list = new ArrayList<>();
      //創建高效字符緩沖輸入流對象,並和data.txt文件關聯
      BufferedReader br = new BufferedReader(new FileReader(new File("data.txt")));
      String line = null;
      //循環讀取每一行
      while(null!=(line = br.readLine())) {
          //將讀到的每一行信息存入到list集合中
          list.add(line);
      }
      //關閉流對象
      br.close();
      //創建鍵盤錄入對象
      Scanner sc = new Scanner(System.in);
      //提示用戶輸入驗證碼
      System.out.println("請輸入一個驗證碼");
      String code = sc.nextLine();
      if(list.contains(code)) {
          System.out.println("驗證成功");
      } else {
          System.out.println("驗證失敗");
      }
      }
      /**
      * 鍵盤錄入3個字符串並寫入項目根路徑下的data.txt文件中
      * @throws Exception 
      */
      private staticvoid writeString2File() throws Exception {
      //創建高效字符緩沖輸出流對象並和data.txt文件關聯
      BufferedWriter bw = new BufferedWriter(new FileWriter(new File("data.txt")));
      String line = null;
      //創建鍵盤錄入對象
      Scanner sc = new Scanner(System.in);
      for(inti = 0;i<3;i++) {
          System.out.println("請輸入第"+(i+1)+"個字符串驗證碼");
          //讀取用戶鍵盤錄入的一行驗證碼信息
          line = sc.nextLine();
          //將讀取到的一行驗證碼寫入到文件中
          bw.write(line);
          //寫入換行符
          bw.newLine();
      }
      //關閉流對象
      bw.close();
      }
      }

      練習五:轉換輸出流的使用

      描述:現有一字符串:”我愛Java”。將該字符串保存到當前項目根目錄下的a.txt文件中。
      要求:使用gbk編碼保存。
      註意:idea的默認編碼是utf-8,所以可以通過file?settings?file encodings設置為gbk格式,否則打開a.txt文件看到的將會是亂碼。
      答案
      操作步驟:

  17. 創建文件字節輸出流關聯目標文件
  18. 根據文件字節輸出流創建轉換輸出流對象,並指定編碼字符集為:gbk
  19. 調用流對象的方法將字符串寫出到文件中。
  20. 關閉流並釋放資源。
    代碼:
public class Test01_05 {
    public static void main(String[] args) throws IOException{
        // 要保存的字符串
        String content = "我愛Java";
        // 創建字節輸出流對象
        FileOutputStream fos = new FileOutputStream("a.txt");
        // 創建轉換輸出流對象
        OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk");
        // 調用方法寫出數據
        osw.write(content);
        // 關閉流釋放資源
        osw.close();
    }
}

練習六:轉換輸入流的使用

描述:利用轉換輸入流將當前項目根目錄下使用gbk編碼的a.txt文件的內容讀取出來,並打印在控制臺上。
要求:不能出現亂碼的情況。
答案
操作步驟:

  1. 創建字節輸入流對象指定文件路徑。
  2. 根據字節輸入流對象創建轉換輸入流對象並指定字符集編碼為:gbk
  3. 調用轉換輸入流對象的讀取方法讀取內容
  4. 關閉流釋放資源
    代碼:
    public class Test01_06 {
    public static void main(String[] args) throws IOException{
        // 創建字節輸入流對象並關聯文件
        FileInputStream fis = new FileInputStream("a.txt");
        // 創建轉換輸入流對象
        InputStreamReader isr = new InputStreamReader(fis,"gbk");
        // 定義字符數組存放讀取的內容
        char[] buffer = newchar[1024];
        // 定義變量接收讀取的字符個數
        intlen = -1;
        while((len = isr.read(buffer)) != -1) {
            System.out.print(new String(buffer,0,len));
        }
        // 關閉流
        isr.close();
    }
    }

文件IO操作學習筆記