java之IO
? 版權聲明:本文為博主原創文章,轉載請註明出處
1.RandomAccessFile:訪問保存數據記錄的文件的
1.1 創建對象時必須指定對文件的操作方式。r:只讀 rw:讀寫
1.2 該對象讀取文件時存在一個指針,指向當前位置;因此程序可以跳到任何地方讀寫數據
1.3 raf.getFilePointer():定位,獲取指針當前所在位置
1.3 raf.seek(pos):跳轉,將指針移動到文件中的指定位置
2.字節流
2.1 InputStream:抽象類,不能直接生成對象,它是所有字節輸入流的父類。輸入流主要用於讀操作。is.read()
2.2 OutputStream:抽象類,不能直接生成對象,它是所有字節輸出流的父類。輸出流主要用於寫操作。os.writer()
2.3 FileInputStream:用於讀取本地文件中的字節數據
2.4 FileOutputStream:用於將字節數據寫入到文件中
/** * 通過字節數組拷貝文件 * * @param srcFile * 源文件 * @param destFile * 目標文件 * @throws IOException */ public static void copyFileByByteArray(String srcFile, String destFile) throws IOException { long startTime = System.currentTimeMillis();// 開始時間 // 將文件以字節流的形式進行讀/寫操作 FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile); byte[] buff = new byte[1024];// 存放一次讀取的字節數據 int b;// 一次性讀取的字節個數 // 批量讀取數據 while ((b = fis.read(buff, 0, buff.length)) != -1) { fos.write(buff, 0, b);// 批量寫入數據 } // 關閉文件輸入/輸出流 fis.close(); fos.close(); long endTime = System.currentTimeMillis();// 結束時間 System.out.println("copFileByByteArray執行時間為:" + (endTime - startTime) + "ms"); }
2.5 BufferedInputStream:帶緩存區的輸入流,默認緩存區大小是8M,可減少訪問磁盤的次數,提高文件讀取性能
2.6 BufferedOutputStream:帶緩存區的輸出流,可以提高文件寫入效率
/** * 通過字節數組緩存拷貝文件 * * @param srcFile * 源文件 * @param destFile * 目標文件 * @throws IOException */ public static void copyFileByByteArrayBuffer(String srcFile, String destFile) throws IOException { long startTime = System.currentTimeMillis();// 開始時間 // 將文件以帶緩存區的字節流的形式進行讀/寫操作 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile)); byte[] buff = new byte[1024];// 定義緩存區 int b;// 一次讀取的字節個數 // 批量讀取字節數據並放入緩存區中 while ((b = bis.read(buff, 0, buff.length)) != -1) { bos.write(buff, 0, b);// 批量將緩存區中的數據寫入 bos.flush();// 刷新緩沖區 } // 關閉帶緩存區的輸入/輸出流 bos.close(); bis.close(); long endTime = System.currentTimeMillis();// 結束時間 System.out.println("copFileByByteArrayBuffer執行時間為:" + (endTime - startTime) + "ms"); }
3.字符流
3.1 InputStreamReader:字節流與字符流之間的橋梁,將字節輸入流以指定的編碼格式轉換為字符輸入流
3.2 OutputStreamWriter:字節流與字符流之間的橋梁,將字節輸出流以指定的編碼格式轉換為字符輸出流
/** * 通過字符流批量拷貝文件 * * @param srcFile * 源文件 * @param destFile * 目標文件 * @throws IOException */ public static void copyFileByIsrAndOsw(String srcFile, String destFile) throws IOException { long startTime = System.currentTimeMillis();// 開始時間 // 創建文件輸入流 FileInputStream fis = new FileInputStream(srcFile); // 將字節流以UTF-8的格式轉換為字符流 InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); // 創建文件輸出流 FileOutputStream fos = new FileOutputStream(destFile); // 將字節流以UTF-8的格式轉換為字符流 OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); char[] buff = new char[1024]; int b;// 讀取的字符數據 while ((b = isr.read(buff, 0, buff.length)) != -1) {// 批量讀取字符 osw.write(buff, 0, b);// 輸出字符 } // 關閉字符輸入流 isr.close(); // 關閉字符輸出流 osw.close(); // 關閉字節輸入流 fis.close(); // 關閉字節輸出流 fos.close(); long endTime = System.currentTimeMillis();// 結束時間 System.out.println("copyFileByByteIsrAndOsw執行時間為:" + (endTime - startTime) + "ms"); }
3.4 FileReader:以字符流的形式讀取本地文件
3.5 FileWriter:將字符流的形式將數據寫入到文件中
/** * 通過字符流批量拷貝文件 * * @param srcFile * 源文件 * @param destFile * 目標文件 * @throws IOException */ public static void copyFileByFrAndFw(String srcFile, String destFile) throws IOException { long startTime = System.currentTimeMillis();// 開始時間 FileReader fr = new FileReader(srcFile); FileWriter fw = new FileWriter(destFile); char[] buff = new char[1024]; int b;// 讀取的字符數據 while ((b = fr.read(buff, 0, buff.length)) != -1) {// 批量讀取字符 fw.write(buff, 0, b);// 輸出字符 } // 關閉字符輸入流 fw.close(); // 關閉字符輸出流 fr.close(); long endTime = System.currentTimeMillis();// 結束時間 System.out.println("copyFileByFrAndFw執行時間為:" + (endTime - startTime) + "ms"); }
3.6 BufferedReader:帶緩存區的字符輸入流
3.7 BufferedWriter:帶緩存區的字符輸出流
/** * 通過字符流批量拷貝文件 * * @param srcFile * 源文件 * @param destFile * 目標文件 * @throws IOException */ public static void copyFileByBrAndBw(String srcFile, String destFile) throws IOException { long startTime = System.currentTimeMillis();// 開始時間 BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(srcFile))); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(destFile))); String line;// 讀取的行數據 while ((line = br.readLine()) != null) {// 批量讀取字符 bw.write(line); bw.newLine(); bw.flush(); } // 關閉字符輸入流 bw.close(); // 關閉字符輸出流 br.close(); long endTime = System.currentTimeMillis();// 結束時間 System.out.println("copyFileByBrAndBw執行時間為:" + (endTime - startTime) + "ms"); }
參考:http://www.imooc.com/learn/123
java之IO