Хорошо, это будет немного длиннее. Поэтому я тестировал тестовую программу 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
}
У меня нет идей. Почему я не могу удалить файл?
EDIT: я отредактировал код, но все это дает мне ту же проблему: S
Возможно, не совсем ваша проблема, но уверены ли вы, что в коде отсутствует другое исключение, кроме FileNotFoundException? Например, проблемы при закрытии ваших потоков и т. Д. Поскольку перехват всех исключений и обработка только FileNotFoundException выкидывает все остальные исключения, не сообщая вам, что возникла какая-либо проблема. –
Также имейте в виду, что Windows не позволит вам удалить любой файл, открытый любым процессом. – chrylis