6

我正在开发一个桌面应用程序,它使用 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它不会打印预期的结果。

我做了一些谷歌搜索,但没有找到任何具体的东西。

4

3 回答 3

1

如果您replaceAll()像这样使用path.replaceAll("\\", "/")删除反斜杠,它将失败,因为该replaceAll()方法需要一个正则表达式作为第一个参数,而单个反斜杠(编码为"\\")是一个无效的正则表达式。要使其使用replaceAll(),您需要像这样对反斜杠进行双重转义(一次用于字符串,再次用于正则表达式)path.replaceAll("\\\\", "/")

但是,您不需要正则表达式!相反,使用这样的基于纯文本的replace()方法:

path.replace("\\", "/")

请注意,名称“replace”和“replaceAll”具有误导性:“replace”仍然替换所有出现...决定名称“replaceAll”的白痴应该选择“replaceRegex”或类似的东西

编辑

尝试:

path = path.replace("\\\\", "/");
于 2012-04-14T16:16:34.137 回答
1

只需使用内置对象方法:

System.out.println("file = "+xmlFile.toString());

您还可以使用:

System.out.println("f = " + f.getAbsolutePath());

此外,如果您遇到文件不存在的问题,请先检查然后继续:

File file = new File (aPath);
if(file.exists()) {
  //Do your work
}
于 2012-04-13T14:40:30.173 回答
0

现在回答这个问题为时已晚,但是......从我的配置文件中删除“”帮助我的意思是

    pathVariable=c:\\some\\path\\here

不是这个

    pathVariable="c:\\some\\path\\here"
于 2016-04-12T19:05:58.627 回答