1. 程式人生 > >Java讀寫檔案文字檔案的示例

Java讀寫檔案文字檔案的示例

/**
 * 讀/寫文字檔案
 * 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(); // 重新整理緩衝區
	}
}