//一個簡單的刪除文件代碼 public boolean deleteFile(String sPath) { boolean flag = false; File file = new File(sPath); // 路徑爲文件且不爲空則進行刪除 if (file.isFile() && file.exists()) { file.delete(); System.out.println("delete file."); flag = true; } return flag; }
單獨測試刪除代碼沒有問題。
後來在讀文件的方法中調用刪除方法,在讀取完畢後刪除。
public void readFile(String filename) { FileReader reader = null; try { reader = new FileReader(filename);// 讀取url文件 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } String name = filename.split("\\\\")[filename.split("\\\\").length-1]; System.out.println("filename is "+ filename); BufferedReader br = new BufferedReader(reader); String s1 = null; String temStr = ""; String content = ""; int breakCount = 0; try { while ((s1 = br.readLine()) != null) { breakCount++; if(s1.contains("------------------------")) { } else { if(breakCount == 2 && s1.contains("docid")) { break; } } } if(breakCount != 2) { System.out.println(breakCount); boolean flag = deleteFile(filename); System.out.println(flag); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
這樣寫的時候遇到了問題,delete方法返回了true值,但是文件並沒有被刪除
檢查之後發現是因爲文件的讀取流未關閉,造成文件無法刪除。
但是爲什麼會返回true還沒有確定,估計是個小bug吧
把代碼修改一下
public void readFile(String filename) { FileReader reader = null; try { reader = new FileReader(filename);// 讀取url文件 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } String name = filename.split("\\\\")[filename.split("\\\\").length-1]; System.out.println("filename is "+ filename); BufferedReader br = new BufferedReader(reader); String s1 = null; String temStr = ""; String content = ""; int breakCount = 0; try { while ((s1 = br.readLine()) != null) { breakCount++; if(s1.contains("------------------------")) { } else { if(breakCount == 2 && s1.contains("docid")) { break; } } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(breakCount != 2) { System.out.println(breakCount); boolean flag = deleteFile(filename); System.out.println(flag); } }
把刪除放在流關閉之後,這樣就沒有問題了