自工作以后好久没有整理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的效率最高,没有进一步做比较,不得而知了,等有时间再做进一步测试吧。