Удалить входной XML-файл Java

Я читаю файл XML, обрабатываю элементы и пишу другой файл XML с извлеченными элементами из входного файла. Для этого я использую курсор StAX: я читаю элементы с помощью XMLStreamReader и записываю элементы в другой файл с использованием XMLStreamWriter.

Читатель:

 XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    XMLStreamReader streamReader = inputFactory.createXMLStreamReader(new FileReader(inputFile));

Писатель:

XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(new FileOutputStream (outputFile),"UTF-8");

После того как я закончу обработку и запись выходного файла, я хочу удалить прочитанный файл (входной файл). Для этого я использую:

public void deleteInputFile(String inputFile) {
        File fileToDelete = new File(inputFile);
        if(fileToDelete.delete()){
            System.out.println(fileToDelete.getName() + " is deleted!");
        }else{
            System.out.println("Delete operation is failed.");
        }
    }

Все программы работают нормально, но удаление невозможно. Я получаю ответ:

Операция удаления не удалась.

Я думаю, что читатель закроет входной файл после того, как прочитает его.

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

2 ответа

Решение

Все потоки должны быть объявлены отдельно, поэтому вы можете закрыть их отдельно:

// Declarring streams:
FileReader fr = new FileReader(inputFile);
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(fr);
...

// Closing streams.
fr.close();
streamReader.close();

// Deleting inputFile
deleteMethod();

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

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

Класс Files предоставляет два метода удаления.

delete(Path) Метод удаляет файл или выдает исключение, если удаление не удается. Например, если файл не существует, генерируется исключение NoSuchFileException. Вы можете поймать исключение, чтобы определить причину неудачного удаления, следующим образом:

try {
    Files.delete(path);
} catch (NoSuchFileException x) {
    System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
    System.err.format("%s not empty%n", path);
} catch (IOException x) {
    // File permission problems are caught here.
    System.err.println(x);
}

deleteIfExists(Path) Метод также удаляет файл, но если файл не существует, исключение не выдается. Сбой без вывода сообщений полезен, когда у вас есть несколько потоков, удаляющих файлы, и вы не хотите создавать исключение только потому, что один поток сделал это первым.

Взято из https://docs.oracle.com/javase/tutorial/essential/io/delete.html

Вот еще один пример http://www.mkyong.com/java/how-to-delete-file-in-java/

Другие вопросы по тегам