Java Saxon XML验证:验证失败时,无法删除XML文件
几周前,我在这里发布了。现在,我有一个类似的问题与不同的情况。我创建了一个java上传,我想在这里检查XML文件的格式是否正确。检查后,我想删除它。但是如果转换失败,我将无法删除该文件。 我创建了一个简单得多的示例,在本地计算机上运行它,我遇到了同样的问题。请参阅下面的源代码。你可以很容易地复制和粘贴它,并尝试自己 我是否发现了一个bug,可能是我几周前报告的那个bug,或者我在代码中遗漏了什么?我用的是萨克森9.4HEJava Saxon XML验证:验证失败时,无法删除XML文件,java,xml,validation,saxon,well-formed,Java,Xml,Validation,Saxon,Well Formed,几周前,我在这里发布了。现在,我有一个类似的问题与不同的情况。我创建了一个java上传,我想在这里检查XML文件的格式是否正确。检查后,我想删除它。但是如果转换失败,我将无法删除该文件。 我创建了一个简单得多的示例,在本地计算机上运行它,我遇到了同样的问题。请参阅下面的源代码。你可以很容易地复制和粘贴它,并尝试自己 我是否发现了一个bug,可能是我几周前报告的那个bug,或者我在代码中遗漏了什么?我用的是萨克森9.4HE public class TestClass { public stat
public class TestClass
{
public static void main (String[] args) throws Exception
{
boolean isWellFormed = isXMLwellformed(new File("work/file.xml"));
if(isWellFormed) System.out.println("File is well formed");
else
{
System.out.println("File is not well formed");
}
FileUtils.deleteDirectory(new File("work"));
}
private static boolean isXMLwellformed(File file)
{
boolean isWellformed = true;
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource source = new StreamSource(file);
try
{
Transformer trans = factory.newTransformer();
SAXResult sink = new SAXResult(new DefaultHandler());
trans.transform(source, sink);
}
catch (TransformerException err)
{
System.err.println("Validation failed: " + err.getMessage());
isWellformed = false;
}
return isWellformed;
}
}
现在,我找到了一个有效的解决方案。如果我自己创建FileReader并在catch块中关闭它,它就会工作。但它不是应该自动关闭吗
private static boolean isXMLwellformed(File file) throws IOException
{
boolean isWellformed = true;
BufferedReader br = new BufferedReader(new FileReader(file));
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource source = new StreamSource(br);
try
{
Transformer trans = factory.newTransformer();
SAXResult sink = new SAXResult(new DefaultHandler());
trans.transform(source, sink);
}
catch (TransformerException err)
{
System.err.println("Validation failed: " + err.getMessage());
br.close();
isWellformed = false;
}
return isWellformed;
}
你能帮我们检查一下这个问题在Saxon 9.5中是否仍然存在吗?