2015-07-09 12 views
1

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

Читатель:

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."); 
     } 
    } 

Вся программа работает нормально, но исключение исключается. Получаю ответ:

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

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

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

+1

Попробуйте закрыть FileReader? – dnault

+0

@dnault закрытие потока просто прекращает операцию чтения или записи, но не относится к файлу –

+0

, убедитесь, что 'streamReader' /' streamWriter' закрыты –

ответ

0

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

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

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

// Deleting inputFile 
deleteMethod(); 
2

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

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

Класс 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/