我正在开发一个桌面应用程序,它使用XPath读取特定的XML元素,并将它们显示在JFrame
的文本字段中。
到目前为止,程序运行顺利,直到我决定在String
类中传递File
变量。
public void openNewFile(String filePath) {
//file path C:\\Documents and Settings\\tanzim.hasan\\my documents\\xcbl.XML
//is passed as a string from another class.
String aPath = filePath;
//Path is printed on screen before entering the try & catch.
System.out.println("File Path Before Try & Catch: "+filePath);
try {
//The following statement works if the file path is manually written.
// File xmlFile = new File ("C:\\Documents and Settings\\tanzim.hasan\\my documents\\xcbl.XML");
//The following statement prints the actual path
File xmlFile = new File(aPath);
System.out.println("file =" + xmlFile);
//From here the document does not print the expected results.
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
XPath srcPath = XPathFactory.newInstance().newXPath();
XPathShipToAddress shipToPath = new XPathShipToAddress(srcPath, doc);
XPathBuyerPartyAddress buyerPartyPath = new XPathBuyerPartyAddress(srcPath, doc);
} catch (Exception e) {
//
}
}
如果我使用静态路径定义xmlFile
(即手动编写),则程序按预期工作。但是,如果我将路径作为字符串变量aPath
传递,则不会写入静态路径,而是不会打印预期的结果。
我做了一些谷歌搜索,但没有找到任何具体的东西。
答案 0 :(得分:1)
只需使用内置对象方法:
System.out.println("file = "+xmlFile.toString());
你也可以使用:
System.out.println("f = " + f.getAbsolutePath());
此外,如果您遇到文件不存在的问题,请先检查然后继续:
File file = new File (aPath);
if(file.exists()) {
//Do your work
}
答案 1 :(得分:1)
如果您使用path.replaceAll("\\", "/")
这样的replaceAll()
来删除反斜杠,则会失败,因为"\\"
方法需要正则表达式作为第一个参数,单个反斜杠(编码为replaceAll()
)是无效正则表达式。要使用path.replaceAll("\\\\", "/")
使其工作,您需要双重转义反斜杠(一次为String,再为正则表达式),如path.replace("\\", "/")
。
但是,你不需要正则表达式!相反,使用基于纯文本的replaceAll()
方法,如下所示:
path = path.replace("\\\\", "/");
请注意,名称“replace”和“replaceAll”具有误导性:“替换”仍然替换所有次出现......决定名称为“replaceAll”的白痴应该选择“replaceRegex”或类似的东西
尝试:
{{1}}
答案 2 :(得分:0)
现在回答这个已经太晚了但是...从我的配置文件中删除“”有帮助 我的意思是
pathVariable=c:\\some\\path\\here
不是这个
pathVariable="c:\\some\\path\\here"