Java讀寫檔案文字檔案的示例
阿新 • • 發佈:2019-01-06
/** * 讀/寫文字檔案 * 1. 將檔案讀入到StringBuffer,在控制檯輸出 * 2. 將內容中的文字寫到檔案 * 3. 將一個檔案的內容讀出來寫入另一個檔案中 * 4. 展示瞭如何從輸入流中讀出來內容寫入輸出流中(僅限文字流) * 5. 如何判斷命名管道及檔案是否存在,若不存在即建立 */ public class IOFile { public static void main(String[] args) { // 例項化,可以呼叫類中的方法 IOFile demo = new IOFile(); // 宣告鍵盤輸入 Scanner scanner = new Scanner(System.in); boolean isNext = true; while(isNext) { System.out.println("==========================================="); System.out.println("1. 讀\n" + "2. 寫\n" + "3. 拷貝"); System.out.println("**********選擇數字1/2/3**********"); int choice = scanner.nextInt(); switch (choice) { case 1: // 測試讀檔案 { // 宣告輸入流 InputStream is = null; // 定義檔案目錄(路徑) File fileCon = new File("E:/test/"); // 判斷該路徑是否存在,若不存在,建立 if (!fileCon.exists()) { // 建立此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄 fileCon.mkdirs(); } try { // 定義檔案的File類 File file = new File("E:/test/test.txt"); // 判斷檔案是否存在,若不存在,建立新檔案 if (!file.exists()) { file.createNewFile(); } is = new FileInputStream(file); StringBuffer buffer = new StringBuffer(); // 呼叫readToBuffer()方法將is流中的內容讀到buffer中 demo.readToStringBuffer(buffer, is); // 將讀到 buffer 中的內容寫出來 System.out.println(buffer); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { // 關閉流 is.close(); } catch (IOException e) { e.printStackTrace(); } } break; } case 2: // 測試寫,寫到控制檯 { StringBuffer buffer = new StringBuffer("Only a test\n"); // System.out本身就是PrintStream物件 demo.writeFromStringBuffer(buffer, System.out); break; } case 3: // 測試拷貝 { try { // 呼叫copyTextFile()方法 demo.copyFile("E:/test/test.txt", "E:/test/r.txt"); } catch (IOException e) { e.printStackTrace(); } break; } default: // 退出 { isNext = false; } } } System.out.println("退出。。。"); } /** * 1. 演示將流中的文字讀入一個 StringBuffer 中,控制檯列印 * * @throws IOException */ public void readToStringBuffer(StringBuffer strBuf, InputStream is) throws IOException { String line; // 用來儲存每行讀取的內容 BufferedReader reader = new BufferedReader(new InputStreamReader(is)); //按行讀取內容 while ((line = reader.readLine()) != null) {//如果 line為空說明讀完了 // 將讀到的內容新增到buffer中 strBuf.append(line); // 新增換行符 strBuf.append("\n"); } } /** * 2. 演示將 StringBuffer中的內容讀出到流中 */ public void writeFromStringBuffer(StringBuffer strBuf, OutputStream os) { // 用 PrintStream 可以方便的把內容輸出到輸出流中 PrintStream ps = new PrintStream(os); ps.print(strBuf.toString()); } /** * 3. 拷貝文字檔案 */ public void copyFile(String inFilename, String outFilename) throws IOException { // 先根據輸入/輸出檔案生成相應的輸入/輸出流 InputStream is = new FileInputStream(inFilename); OutputStream os = new FileOutputStream(outFilename); // 呼叫 copyStream(InputStream, OutputStream)方法 copyToStream(is, os); // 用 copyStream 拷貝內容 is.close(); // is 是在這裡開啟的,所以需要關閉 os.close(); // os 是在這裡開啟的,所以需要關閉 } /** * 3.1 從輸入流中拷貝內容到輸入流中 * * @throws IOException */ public void copyToStream(InputStream is, OutputStream os) throws IOException { String line; BufferedReader reader = new BufferedReader(new InputStreamReader(is)); PrintWriter writer = new PrintWriter(new OutputStreamWriter(os)); while ((line = reader.readLine()) != null) { writer.println(line); } writer.flush(); // 重新整理緩衝區 } }