В моем приложении я проверяю значение в файле xml, скажем some.xml
и перемещая файл в другой каталог в зависимости от результата этого чтения.JDOM `SaxBuilder` не выпускает неверный файл
Когда some.xml
неисправен, SaxBuilder
выбрасывает JDOMException
, но не выпускает файл. Когда я пытаюсь переместить some.xml
после этого, я получаю сообщение об ошибке, которое some.xml
используется другим процессом.
мой код это (не относящиеся к делу детали удаляется):
private static String getName(Path fullPath) {
File f = fullPath.toFile();
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = null;
String result = "";
try {
doc = saxBuilder.build(f);
result = doc.getRootElement().getChild("imageControl").getText();
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
return result;
}
так - после запуска этого, на malinformed XML передается в, что malinformed файл XML остается открытым по SaxBulider-- не может двигаться это в моем последующем методе.
Как это исправить?
Единственное, о чем я могу сейчас думать, это сделать временную копию xml и сделать вышеприведенное чтение на копии taht. но это далеко не самое лучшее.
Я использую JDOM 2.0.6 на Java 1.7
ТИА.
// -----------------------------
EDIT:
следующие исправления в соответствующие линии не сделать его:
try (InputStream is = new FileInputStream(f)){
doc = saxBuilder.build(f);
проблема определенно в этом методе. это все работает ожидаемым образом, когда я прокомментирую его вызов.
// -------------------------------------------- ---
РЕДАКТИРОВАТЬ-2
Нету - опечатка.
try (InputStream is = new FileInputStream(f)){
doc = saxBuilder.build(is);
работает.
Попытайтесь использовать 'build (InputStream)' или 'build (Reader)' методы вместо этого и закройте stream/reader в блоке finally в явном виде. – Sergi
@Sergi С чуть более подробной информацией, которая должна быть ответом, а не комментарием. Кроме того, я подозреваю, что JDOM 'SaxBuilder (File)' забывает закрыть ввод. –
@ Sergi напишите это как ans, и я соглашусь. еще не пробовал, но шд работал. – user6762070