好的,這會有點長。所以我做了一個junit測試課來測試我的程序。我想測試,如果使用一個掃描器讀取一個文件到該程序的方法拋出和異常,如果該文件不存在這樣的:file.delete()不會刪除文件,java
@Test
public void testLoadAsTextFileNotFound()
{
File fileToDelete = new File("StoredWebPage.txt");
if(fileToDelete.delete()==false) {
System.out.println("testLoadAsTextFileNotFound - failed");
fail("Could not delete file");
}
try{
assertTrue(tester.loadAsText() == 1);
System.out.println("testLoadAsTextFileNotFound - passed");
} catch(AssertionError e) {
System.out.println("testLoadAsTextFileNotFound - failed");
fail("Did not catch Exception");
}
}
但在「無法刪除文件」測試失敗,所以我做了一些搜索。路徑是正確的,我有權訪問該文件,因爲程序首先完成了它。所以唯一的其他選擇是,文件的流或者來自文件的流仍在運行。所以我檢查了該方法,以及使用該文件的另一種方法,並且儘可能將兩個流在方法內關閉。
protected String storedSite; //an instance variable
/**
* Store the instance variable as text in a file
*/
public void storeAsText()
{
PrintStream fileOut = null;
try{
File file = new File("StoredWebPage.txt");
if (!file.exists()) {
file.createNewFile();
}
fileOut = new PrintStream("StoredWebPage.txt");
fileOut.print(storedSite);
fileOut.flush();
fileOut.close();
} catch(Exception e) {
if(e instanceof FileNotFoundException) {
System.out.println("File not found");
}
fileOut.close();
} finally {
if(fileOut != null)
fileOut.close();
}
}
/**
* Loads the file into the program
*/
public int loadAsText()
{
storedSite = ""; //cleansing storedSite before new webpage is stored
Scanner fileLoader = null;
try {
fileLoader = new Scanner(new File("StoredWebPage.txt"));
String inputLine;
while((inputLine = fileLoader.nextLine()) != null)
storedSite = storedSite+inputLine;
fileLoader.close();
} catch(Exception e) {
if(e instanceof FileNotFoundException) {
System.out.println("File not found");
return 1;
}
System.out.println("an Exception was caught");
fileLoader.close();
} finally {
if(fileLoader!=null)
fileLoader.close();
}
return 0; //return value is for testing purposes only
}
我沒有想法。爲什麼我不能刪除我的文件?
編輯:我編輯的代碼,但是這仍然給我同樣的問題:S
也許不完全是您的問題,但您確定在您的代碼中沒有發生除FileNotFoundException之外的其他異常嗎?例如關閉流等問題。因爲捕獲所有異常並只處理FileNotFoundException拋出所有其他異常而不讓你知道,所以發生任何問題。 –
還請記住,Windows不會讓您刪除任何進程打開的任何文件。 – chrylis