java 判斷檔案是否存在 按行讀取 自己的修改版 測試通過
阿新 • • 發佈:2019-01-28
首先,這樣的程式碼這十多年寫過不少次了,但好像每次寫的都不太一樣。以前一直都流行按位元組讀取。每次都從網上找來差不多的,然後用。但網上有不少按行讀取再寫出的程式碼,但我在使用之後發現讀取時總會有些莫名其妙的問題,比如少讀,重讀。有不少網上程式碼直接使用了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(); }