【发布时间】:2015-06-10 09:39:50
【问题描述】:
我正在使用 Saxon 解析器将大文件拆分为较小的文件。 下面是我的示例代码,
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory
.newTransformer(new StreamSource(new File(xsltPath)));
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
transformer.transform(new StreamSource(new File(sourcePath)),
new StreamResult(new File(resultDir)));
其中 sourcePath = C:/path/Temp/AppModule.xml xsltPath = C:/path/Temp/create-fragment.xslt resultDir = C:/path/Temp/
此代码完美地将 AppModule.xml 拆分为较小的 xml 文件,但在控制台中除外,
错误 java.io.FileNotFoundException: C:\path\Temp(访问被拒绝) net.sf.saxon.trans.XPathException: java.io.FileNotFoundException: C:\path\Temp(访问被拒绝)
我搜索了一下,发现我应该为 new File() 方法指定确切的文件名。但正如您所见,我在编译时不知道文件名,只有在运行时解析器才会识别输入 AppModule.xml 并将 xml 拆分为更小的文件,其中包含 value 标记的名称。
AppModule.xml
<?xml version='1.0' encoding='UTF-8'?>
<data>
<value>A1</value>
<value>B1</value>
<value>C1</value>
<value>A2</value>
<value>B2</value>
<value>C2</value>
</data>
输出: A1.xml:
<?xml version="1.0" encoding="UTF-8"?>
<test>A1</test>
同样会相应地创建B1,c1,A2,B2,C2文件。
请分享您宝贵的cmets。
【问题讨论】:
-
您可以扫描目录并找到创建了哪些文件,然后将它们分配给它们的
File句柄。见:"How to scan a folder in Java" -
您确定您的问题不是:“访问被拒绝”?确保文件权限正确或将位置更改为程序可以访问的位置。