1. 程式人生 > >java 判斷檔案是否存在 按行讀取 自己的修改版 測試通過

java 判斷檔案是否存在 按行讀取 自己的修改版 測試通過

首先,這樣的程式碼這十多年寫過不少次了,但好像每次寫的都不太一樣。以前一直都流行按位元組讀取。每次都從網上找來差不多的,然後用。但網上有不少按行讀取再寫出的程式碼,但我在使用之後發現讀取時總會有些莫名其妙的問題,比如少讀,重讀。有不少網上程式碼直接使用了while ((tempString = reader.readLine())!= null) ,但這樣會有少讀的情況發生。比如第一行。我不知道大家會不會有這樣的情況。我測了N次都會這樣。

於是自己改善了一下。另外,readline的原始碼也看了一下,其實就是判斷/r和/n。但在windows中和linux中,這兩個的函意還是不一樣的。linux下沒有細測。

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");// 設定日期格式
		long begin0 = System.currentTimeMillis();
		filePath = "c:\\smslog_" + df.format(new Date());
		File file = new File(filePath);
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		try {
			StringBuffer sb= new StringBuffer("");
			BufferedReader  reader = new BufferedReader(new FileReader(file));
			String tempString = reader.readLine();
			sb.append(tempString + "\r\n");
			// 一次讀入一行,直到讀入null為檔案結束
			while ((tempString = reader.readLine())!= null) {
				sb.append(tempString+"\r\n");
			}
			reader.close();

			df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設定日期格式
			sb.append("平臺資訊回覆:" + info + "-------操作時間:" + df.format(new Date()));
			BufferedWriter bWriterout = new BufferedWriter(new FileWriter(filePath));			
			bWriterout.write(sb.toString());
			bWriterout.newLine(); // 注意\n不一定在各種計算機上都能產生換行的效果
			bWriterout.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}