java檔案內容:讀取與寫入
阿新 • • 發佈:2019-01-09
對於java檔案讀取一直比較迷糊,整理了下,日後可以直接翻看。
package baixiaosheng; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class JavaReadAndWriteFile { private static String filePath = "E:/learn/test.txt"; /** * 以位元組為單位讀取檔案,常用於讀二進位制檔案,如圖片、聲音、影像等檔案 * * @param fileName */ public static void readFileByBytes(String filePath) { InputStream inputStream = null; /* * try { System.out.println("以位元組為單位讀取檔案內容,一次讀取一個位元組:"); inputStream = new * FileInputStream(new File(fileName)); int tempbyte; while ((tempbyte = * inputStream.read()) != -1) { System.out.write(tempbyte); } * inputStream.close(); } catch (IOException e) { e.printStackTrace(); } */ try { System.out.println("以位元組為單位讀取檔案內容,一次讀取多個位元組:"); inputStream = new FileInputStream(new File(filePath)); byte[] tempbytes = new byte[100]; int byteNumRead = 0; while ((byteNumRead = inputStream.read(tempbytes)) != -1) { System.out.write(tempbytes, 0, byteNumRead); } } catch (Exception e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println(); } /** * 以字元為單位讀取檔案,常用於讀文字,數字等型別的檔案 * * @param fileName */ public static void readFileByChars(String filePath) { Reader reader = null; /*try { System.out.println("以字元為單位讀取檔案內容,一次讀一個字元:"); reader = new InputStreamReader(new FileInputStream(new File( filePath))); int tempChar = 0; while ((tempChar = reader.read()) != -1) { // 對於windows下,\r\n這兩個字元在一起時,表示一個換行; 但如果這兩個字元分開顯示時,會換兩次行。 // 因此,遮蔽掉\r,或者遮蔽\n。否則,將會多出很多空行。 if((char)tempChar != '\r'){ System.out.print((char)tempChar); } } reader.close(); } catch (IOException e) { e.printStackTrace(); }*/ try { System.out.println("以字元為單位讀取檔案內容,一次讀多個字元:"); reader = new InputStreamReader(new FileInputStream(new File( filePath))); char[] tempchars = new char[100]; int charNumRead = 0; // 讀入多個字元到字元陣列中,charNumRead為一次讀取字元數 while ((charNumRead = reader.read(tempchars)) != -1) { if(charNumRead==tempchars.length && (tempchars[tempchars.length - 1] != '\r')){ System.out.println(tempchars); }else { for(char c:tempchars){ if(c == '\r'){ continue; }else { System.out.print(c); } } } } reader.close(); } catch (Exception e) { e.printStackTrace(); }finally { if (reader != null) { try { reader.close(); } catch (IOException e1) {} } } } /** * 以行為單位讀取檔案,常用於讀面向行的格式化檔案 * @param filePath */ public static void readFileByLines(String filePath) { BufferedReader bufferedReader = null; try { System.out.println("以行為單位讀取檔案內容,一次讀一整行:"); bufferedReader = new BufferedReader(new FileReader(new File( filePath))); String tempString; int line = 1; // 一次讀入一行,直到讀入null為檔案結束 while ((tempString = bufferedReader.readLine()) != null) { System.out.println("第" + line + "行內容:" + tempString); line++; } bufferedReader.close(); } catch (Exception e) { e.printStackTrace(); }finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e1) {} } } } /** * 寫內容到檔案 * @param filePath * @param content */ public static void writeContenToFile(String filePath,String content){ FileWriter fileWriter = null; try { //開啟一個寫檔案器,建構函式中的第二個引數true表示以追加形式寫檔案 fileWriter = new FileWriter(filePath,true); fileWriter.append(content); System.out.println("檔案寫入成功...請開啟檔案檢視."); fileWriter.close(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fileWriter != null){ try { fileWriter.close(); } catch (IOException e) {} } } } public static void main(String[] args) { JavaReadAndWriteFile.readFileByBytes(filePath); JavaReadAndWriteFile.readFileByChars(filePath); JavaReadAndWriteFile.readFileByLines(filePath); JavaReadAndWriteFile.writeContenToFile(filePath, " zyb"); } }
看到的另外一個大神對java io流的整理挺好的,文章標題:深入理解JAVA中的IO