2015-01-08 59 views
1

我似乎無法將這個錯誤傳遞給我的生活。在我以前的帖子中,我試圖將屬性更新爲一個xml文件。我可以很好地讀取文件,但是當我嘗試寫入文件時,我得到一個未找到文件的異常。訪問程序文件時出現Java fileNotFoundException

程序在讀取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(系統找不到指定的路徑)

我不完全知道如何解決這個錯誤。你會想如果它能夠讀取並在第一次文件調用中找到它,那麼第二次文件調用應該正常工作?

更新:我嘗試了其他一些方法。

因此,當我將文件路徑設置爲「C:\ Program Files \ test.xml」時,File.exists返回ture,同時讀取和寫入。如果我添加了20%的程序文件路徑,它們都返回false」,如C:\ PROGRAM%20Files \的test.xml

所以document = documentBuilder.parse(file);可以解析該文件只是完美的罰款

當StreamResults改掉打開文件,它thoes文件未找到錯誤,並在程序文件名顯示的%20。

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

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

有另一種方式來流結果xml文件而不是StreamResults?

+0

看起來像是將空格字符轉義爲「%20」,並且該路徑「C:\ Program%20Files」可能不存在... – dokaspar

+0

那麼您如何逃離空間? – user1158745

+1

@ user1158745請參閱:http://stackoverflow.com/questions/4746953/replace-space-characters-in-paths-with-what – colti

回答

1

我想通了。在做了大量的關於其他人有類似問題的閱讀之後,我不得不做了以下工作,才能正常工作。

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

它現在的作品。奇怪的,但它的作品。

+0

因此最終它會啓動 –

+0

是否有任何選項可以接受您自己的答案? –

+0

是的,但我必須等待2天。 – user1158745

0

而不是使用的:

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

使用此:

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

問題在於解析「\」 charatecter

編輯: 我沒有在Java的文件I/O方面有很多經驗,但這裏是我發現的:

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

這可能是問題背後的原因(這裏需要說明的是Excpert的智慧)。

+0

同樣的問題。我將它硬編碼爲「C:\\ Program%20File \\ Test.xml」在我的代碼的頂部,DocumentBuilder沒有問題找到文件並打開它,但是StreamResults沒有問題,這讓我認爲StreamResults有一個bug 。是否有另一個Alt使用StreamResults寫回到xml文件? – user1158745

+0

@ user1158745 file.canWrite()返回false,這可能需要處理你正面臨的問題 –

+0

這是令人困惑的,我測試過的文件。 canRead和write都返回false,但是,我可以讀取文件。當我將文件設置爲C:\\ Temp \ test.xml時,都返回true。您會建議如何解決文件canRead和寫/讀問題? – user1158745

0

看來File找不到該文件,我認爲是因爲路徑存在問題。

該路徑可能是相對或絕對的。你可以嘗試使它相對,並檢查它是否工作...

相關問題