自工作以后好久沒有整理Java的基礎知識了。趁有時間,整理一下Java文件操作的幾種方式。無論哪種編程語言,文件讀寫操作時避免不了的一件事情,Java也不例外。Java讀寫文件一般是通過字節、字符和行三種方式來進行文件的操作。
import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; public class FileUtil { /** * 按行讀取文件 */ public static void ReadFileByLine(String filename) { File file = new File(filename); InputStream is = null; Reader reader = null; BufferedReader bufferedReader = null; try { is = new FileInputStream(file); reader = new InputStreamReader(is); bufferedReader = new BufferedReader(reader); String line = null; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != bufferedReader) bufferedReader.close(); if (null != reader) reader.close(); if (null != is) is.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 按字節讀取文件 * * @param filename */ public static void ReadFileByBytes(String filename) { File file = new File(filename); InputStream is = null; try { is = new FileInputStream(file); int index = 0; while (-1 != (index = is.read())) { System.out.write(index); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (null != is) is.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("-----------------------------------"); try { is = new FileInputStream(file); byte[] tempbyte = new byte[1000]; int index = 0; while (-1 != (index = is.read(tempbyte))) { System.out.write(tempbyte, 0, index); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (null != is) is.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 按字符讀取文件 * * @param filename */ public static void ReadFileByChar(String filename) { File file = new File(filename); InputStream is = null; Reader isr = null; try { is = new FileInputStream(file); isr = new InputStreamReader(is); int index = 0; while (-1 != (index = isr.read())) { System.out.print((char) index); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != is) is.close(); if (null != isr) isr.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 通過OutputStreamWriter寫文件 * * @param filename */ public static void Write2FileByOutputStream(String filename) { File file = new File(filename); FileOutputStream fos = null; // BufferedOutputStream bos = null; OutputStreamWriter osw = null; try { if (!file.exists()) { file.createNewFile(); } fos = new FileOutputStream(file); osw = new OutputStreamWriter(fos); osw.write("Write2FileByOutputStream"); // bos = new BufferedOutputStream(fos); // bos.write("Write2FileByOutputStream".getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (null != osw) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != fos) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 通過BufferedWriter寫文件 * * @param filename */ public static void Write2FileByBuffered(String filename) { File file = new File(filename); FileOutputStream fos = null; OutputStreamWriter osw = null; BufferedWriter bw = null; try { if (!file.exists()) { file.createNewFile(); } fos = new FileOutputStream(file); osw = new OutputStreamWriter(fos); bw = new BufferedWriter(osw); bw.write("Write2FileByBuffered"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (null != bw) { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != osw) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != fos) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 通過FileWriter寫文件 * * @param filename */ public static void Write2FileByFileWriter(String filename) { File file = new File(filename); FileWriter fw = null; try { if (!file.exists()) { file.createNewFile(); } fw = new FileWriter(file); fw.write("Write2FileByFileWriter"); } catch (IOException e) { e.printStackTrace(); } finally { if (null != fw) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { String filename = "D:/testfile.txt"; // ReadFileByLine(filename); // ReadFileByBytes(filename); // ReadFileByChar(filename); String writeFile = "javawrite2file.txt"; // Write2FileByOutputStream(writeFile); // Write2FileByBuffered(writeFile); Write2FileByFileWriter(writeFile); } }
Java讀寫文件的大體情況應該就上面的幾種方式,然而從效率的角度來講。InputStream、OutputStream的效率比BufferedInputStream、BufferedOutputStream的效率要差,至於Reader、Writer沒做進一步的比較。網上看到一些資料說Java.nio的效率最高,沒有進一步做比較,不得而知了,等有時間再做進一步測試吧。