繁体   English   中英

访问程序文件时出现Java fileNotFoundException

[英]Java fileNotFoundException when accessing program files

我似乎无法一辈子都忽略这个错误。 在我以前的文章中,我试图将属性更新为xml文件。 我可以很好地读取文件,但是当我尝试对其进行写入时,却得到了文件未发现异常。

该程序在读取XML文件和查找仅写入该文件的属性时没有问题。 经过一段时间的故障排除后,将文件放在Program Files目录中似乎是一个问题。 如果将xml文件移动到C:\\ Temp \\ test.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 (系统找不到指定的路径)

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

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

因此,当我将文件路径设置为“ C:\\ Program Files \\ test.xml”时,File.exists返回ture,以及进行读写操作。 如果我将%20添加到程序文件路径,它们都将返回false”,例如C:\\ Program%20Files \\ test.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吗?

我想到了。 在阅读了大量有关其他人遇到类似问题的信息后,我不得不做以下工作以使其正常工作。

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

现在可以使用了。 奇怪,但是可以。

而不是使用:

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的智慧来澄清)。

我认为,由于路径问题, File无法找到文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM