2013-06-12 2 views
0

Я хочу удалить файл, а иногда и могу, иногда я этого не делаю. Я делаю это:Удаление файла в Java

String filePath = "C:\\Users\\User\\Desktop\\temp.xml"; 
File f = new File(filePath); 
if (f.exists()) 
{ 
    if(f.delete()) 
    System.out.println("deleted"); 
    else 
    System.out.println("not deleted"); 
} 

Я думаю, что когда я не могу удалить его, это потому, что он все еще открыт где-то в приложении. Но как я могу закрыть его, если я не использую FileInputStream или BufferedReader? Потому что, если я использую эти классы, я не вижу, существует ли файл. Или я могу?

Редактировать: Я только что нашел свою ошибку. Я делал это:

XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(new FileOutputStream(filePath)); 

, а затем, закрыв только в eventWriter.

И я должен сделать это:

FileOutputStream fos = new FileOutputStream(filePath); 
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(fos); 

, а затем:

eventWriter.close(); 
    fos.close(); 

ответ

1

Файл может быть открыт другим процессом, то, возможно, не имеет достаточных прав для удаления файла, .. .

Edit:

Я также настоятельно рекомендую использовать автоматическое управление ресурсами, где это возможно, чтобы убедиться, что ваши потоки/читатели/писатели правильно закрыты.

+0

Вы говорите о разрешениях? Я проверил это, и у меня есть разрешение писать, читать и исполнять. – user2144555

+0

Вы также отметили, что еще один процесс по-прежнему содержит дескриптор файла? – Fildor

+0

Нет .. Как я могу это увидеть? – user2144555

0

Если вы используете класс BufferedReader, вы не можете проверить наличие, для чего предназначен класс File. Вы можете просто открыть/закрыть файл с помощью BufferedReader и проверить его с помощью File. Вот пример:

String filePath = "C:\\Users\\User\\Desktop\\temp.xml"; 
File f = new File(filePath); 
if (f.exists()) 
{ 
    BufferedReader open = new BufferedReader(new FileReader(f)); // opens file 
    open.write("blah"); //writes to file 
    open.close(); // closes file 
} else { 
    System.out.println("File cannot be found"); 
} 

Надеюсь, это поможет вам понять ситуацию немного больше!

+0

Читатель написать файл? Также вызов close-method должен быть в блоке finally. – Puce

+0

О, я вижу ошибку. Ха, я имел в виду FileWriter! но я знаю, это был просто простой пример – user2277872

1

Я предлагаю использовать NIO2 Files.delete, который генерирует исключение IOException, которое объясняет, почему файл не может быть удален.