访问程序文件时出现Java fileNotFoundException

问题描述 投票:0回答:4

我似乎一生都无法绕过这个错误。在我的上一篇文章中,我试图将属性更新到 xml 文件。我可以很好地读取该文件,但是当我尝试写入该文件时,我收到文件未找到异常。

该程序在读取 XML 文件并找到仅写入该文件的属性时没有问题。经过一段时间的故障排除后,问题似乎出在 Program Files 目录中的文件上。如果我将 xml 文件移至 C:\Temp est.xml,我可以毫无问题地写入它。一旦它进入带有任何类型空格的文件夹,它似乎就找不到它。似乎是 StreamResults 的问题。

        File file = new File(filePath); 
        document = documentBuilder.parse(file);
        NodeList sessionNodelist = document.getElementsByTagName("session");

      if (sessionNodelist.getLength() > 0)
        {
            Element sessionElement = (Element) sessionNodelist.item(0);
            sessionElement.setAttribute("timeout", "12");
            sessionElement.setAttribute("warning", "10");   
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(document);
            try{
            StreamResult result = new StreamResult(file);
            transformer.transform(source, result);
            }catch(Exception e)
            {   
                logger.info(e.getMessage());
            }
        }

java.io.FileNotFoundException: C:\Program%20Files\Test.xml
(系统找不到指定的路径)

我不太确定如何解决这个错误。您会认为如果它可以读取它并在第一个文件调用中找到它,那么第二个文件调用应该可以正常工作吗?

更新:我尝试了一些其他方法。

因此,当我将文件路径设置为“C:\Program Files est.xml”时,File.exists 返回 ture,以及读取和写入。如果我将 %20 添加到程序文件路径,它们都会返回 false”,例如 C:\Program%20Files est.xml。

所以

document = documentBuilder.parse(file);
可以很好地解析文件。

当 StreamResults 尝试打开文件时,它会出现文件未找到错误并在程序文件名中显示 %20。

StreamResult result = new StreamResult(file);
transformer.transform(source, result);

java.io.FileNotFoundException: C:\Program%20Files\Test.xml
(系统找不到指定的路径)

是否有另一种方法可以将结果流式传输到 xml 文件而不是 StreamResults?

java file filenotfoundexception
4个回答
1
投票

我想通了。在阅读了大量有关其他人遇到类似问题的文章后,我必须执行以下工作才能使其正常工作。

  StreamResult result = new StreamResult(file.getPath());
  transformer.transform(source, result);

现在可以使用了。奇怪,但它有效。


0
投票

而不是使用:

String filePath = "C:\Program%20Files\Test.xml";

用这个:

String filePath = "C:\\Program%20Files\\Test.xml";

问题在于解析 "\" 字符

编辑: 我对 Java 的文件 I/O 没有太多经验,但这是我发现的:

File file = new File(filePath);
System.out.println(file.canRead());  // false
System.out.println(file.canWrite());  // false

这可能是问题背后的原因(这里需要Excpert的智慧来澄清)。


0
投票

似乎

File
找不到该文件,我认为是因为路径有问题。

路径可以是相对路径或绝对路径。您可以尝试使其相对,然后回来检查它是否有效......


0
投票

java.io.FileNotFoundException:C:\Program Files\Weka-3-8-6\logistic.model(访问被拒绝) 这是我在尝试将旧模型保存为新模型时收到的消息。 我该如何解决这个问题?

提前感谢您的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.