簡體   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