檔案讀寫有以下幾種常用的方法
1、位元組讀寫(InputStream/OutputStream)、字元讀取(FileReader/FileWriter)
FileInputStream的read(buffer)方法,每次從來源程式檔案OpenFile.java中讀取512個位元組,儲存在緩衝區buffer中,再將以buffer中的值構造的字串new String(buffer)顯示在螢幕上。程式如下(本常式序放在包biz.1cn.stream裡面,另外請在根目錄下建立TestFile.txt檔案,以便正常運行
代碼如下 |
複製代碼 |
package biz.1cn.stream; import java.io.FileInputStream; import java.io.IOException; /** * @author chenrz(simon) * @date 2006-6-29 * <p> * JAVA位元組流例子-讀檔案 * </p> */ public class ReadFile { public static void main(String[] args) { try { // 建立檔案輸入資料流對象 FileInputStream is = new FileInputStream("TestFile.txt"); // 設定讀取的位元組數 int n = 512; byte buffer[] = new byte[n]; // 讀取輸入資料流 while ((is.read(buffer, 0, n) != -1) && (n > 0)) { System.out.print(new String(buffer)); } System.out.println(); // 關閉輸入資料流 is.close(); } catch (IOException ioe) { System.out.println(ioe); } catch (Exception e) { System.out.println(e); } } } |
本例用System.in.read(buffer)從鍵盤輸入一行字元,儲存在緩衝區buffer中,再以FileOutStream的write(buffer)方法,將buffer中內容寫入檔案WriteFile.txt中,程式如下(本常式序放在包biz.1cn.stream裡面,另外運行後會在根目錄下建立WriteFile.txt檔案):
代碼如下 |
複製代碼 |
package biz.1cn.stream; import java.io.FileOutputStream; import java.io.IOException; /** * @author chenrz(simon) * @date 2006-6-29 * <p> * JAVA位元組流例子-寫檔案(www.1cn.biz) * </p> */ public class WriteFile { public static void main(String[] args) { try { System.out.print("輸入要儲存檔案的內容:"); int count, n = 512; byte buffer[] = new byte[n]; // 讀取標準輸入資料流 count = System.in.read(buffer); // 建立檔案輸出資料流對象 FileOutputStream os = new FileOutputStream("WriteFile.txt"); // 寫入輸出資料流 os.write(buffer, 0, count); // 關閉輸出資料流 os.close(); System.out.println("已儲存到WriteFile.txt!"); } catch (IOException ioe) { System.out.println(ioe); } catch (Exception e) { System.out.println(e); } } } |
2、字元讀取(FileReader/FileWriter)
例
代碼如下 |
複製代碼 |
package test; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test { public static void main(String arg[]) { String fileName = "E:sharetest.txt"; String writeData = "HelloWorld!rnnihao我的記憶體是3G的 "; File file = new File(fileName); if(file.exists()){ file.delete(); } char[] byteOutData = writeData.toCharArray(); char[] byteInData = new char[50]; int length = 0; try { file.createNewFile(); if(file.exists() && file.canWrite()){ FileWriter fileWrite = new FileWriter(file); fileWrite.write(byteOutData); fileWrite.close(); } if (file.exists() && file.canRead()) { FileReader fileReader = new FileReader(file); while((length = fileReader.read(byteInData)) !=-1){ System.out.print(new String(byteInData,0,length)); } fileReader.close(); } } catch (IOException e) { System.out.println("IOException occur"); e.getMessage(); } } } |
3、行讀取(BufferedReader/BufferedWriter)
代碼(以讀取為例):
代碼如下 |
複製代碼 |
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; /** * <b>檔案讀取類</b><br /> * 1、按位元組讀取檔案內容<br /> * 2、按字元讀取檔案內容<br /> * 3、按行讀取檔案內容<br /> * @author qin_xijuan * */ public class FileOperate { private static final String FILE_PATH = "d:/work/the List of Beautiful Music.txt";
/** * 以位元組為單位讀取檔案內容 * @param filePath:需要讀取的檔案路徑 */ public static void readFileByByte(String filePath) { File file = new File(filePath); // InputStream:此抽象類別是表示位元組輸入資料流的所有類的超類。 InputStream ins = null ; try{ // FileInputStream:從檔案系統中的某個檔案中獲得輸入位元組。 ins = new FileInputStream(file); int temp ; // read():從輸入資料流中讀取資料的下一個位元組。 while((temp = ins.read())!=-1){ System.out.write(temp); } }catch(Exception e){ e.getStackTrace(); }finally{ if (ins != null){ try{ ins.close(); }catch(IOException e){ e.getStackTrace(); } } } } /** * 以字元為單位讀取檔案內容 * @param filePath */ public static void readFileByCharacter(String filePath){ File file = new File(filePath); // FileReader:用來讀取字元檔案的便捷類。 FileReader reader = null; try{ reader = new FileReader(file); int temp ; while((temp = reader.read()) != -1){ if (((char) temp) != 'r') { System.out.print((char) temp); } } }catch(IOException e){ e.getStackTrace(); }finally{ if (reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 以行為單位讀取檔案內容 * @param filePath */ public static void readFileByLine(String filePath){ File file = new File(filePath); // BufferedReader:從字元輸入資料流中讀取文本,緩衝各個字元,從而實現字元、數組和行的高效讀取。 BufferedReader buf = null; try{ // FileReader:用來讀取字元檔案的便捷類。 buf = new BufferedReader(new FileReader(file)); // buf = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String temp = null ; while ((temp = buf.readLine()) != null ){ System.out.println(temp); } }catch(Exception e){ e.getStackTrace(); }finally{ if(buf != null){ try{ buf.close(); } catch (IOException e) { e.getStackTrace(); } } } } public static void main(String args[]) { readFileByByte(FILE_PATH); readFileByCharacter(FILE_PATH); readFileByLine(FILE_PATH); } } |