2015-12-06 1 views
1

Я пытаюсь удалить файл, а затем его воссоздать. Сначала я проверяю, существует ли файл уже, а если это так, я удаляю его. Затем я пытаюсь создать новый файл в том же месте с тем же именем. Когда я делаю это я получаю эту ошибку:AccessDeniedException при создании недавно удаленного файла

java.nio.file.AccessDeniedException: inputLog.txt 

Однако, если файл не существовал до выполнения этих трех операций, то создается файл без проблем.

Вот мой код:

final Path INPUTLOGPATH = FileSystems.getDefault().getPath("inputLog.txt"); 
try { 
    reader = Files.newBufferedReader(INPUTLOGPATH, charset); 
} catch (IOException e) { 
    reader = null; 
} 

if (reader != null) { 
    try { 
     Files.delete(INPUTLOGPATH); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

try { 
    Files.createFile(INPUTLOGPATH); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

ответ

1

First I check to see if the file already exists, then, if it does, I delete it.

Почему? Открытие файла для вывода уже сделает все это. Вы просто повторяете работу, которую уже должна выполнить операционная система. Удалите все это. Вы делаете это неправильно, не закрывая программу чтения файлов, но это не имеет значения. Не пишите лишний код.

Then I try to create a new file in the same place with the same name

Это также не нужно, как показано на рисунке. Просто откройте файл для вывода, когда вам это нужно.

Как вы уже сейчас:

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

Не делайте этого. Просто удалите весь этот код. Он ничего не делает.

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

+0

После инициализации считывателя файл читается со всех сторон через один раз, а после удаления файла и последующего его повторного создания он никогда не будет использоваться снова в течение всего жизненного цикла программы, пока сама программа не будет перезапущена. Если вы посмотрите на код, когда я проверяю, существует ли файл уже, все, что я делаю, ссылается на работу, которая была сделана ранее, я не делаю никакой работы, кроме проверки логического. Мне нужно воссоздать файл, потому что мне нужно, чтобы файл был пустым. – Ulsting

+0

Пожалуйста, просто предположите, что между данным кодом есть другой код, который не является причиной проблемы, которую я имею, но делает код, который у меня есть, и отвечаю на вопрос. – Ulsting

+0

Я ответил на вопрос. Вы не закрываете программу чтения файлов, и удаление большинства или всего этого кода устраняет проблему, а также некоторые другие, которых вы не ожидали. 'new FileWriter()' достаточно. Или ничего, если вы больше не читаете файл. Я могу только прокомментировать код, который вы действительно опубликовали, и я, конечно, не готов считать, что все остальное без ошибок, учитывая то, что вы разместили здесь. – EJP

Смежные вопросы