2014-03-18 152 views
2

在特定服務器(Windows 2012 R2服務器)上,我無法創建臨時文件。每次嘗試時都會收到以下錯誤。java.io.IOException:系統找不到指定的路徑

java.io.IOException: The system cannot find the path specified 
at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
at java.io.File.createTempFile(Unknown Source) 
etc.. 

錯誤發生,每次下面的代碼爲然:

InputStream inputStream = portalBean.createPDF(sessionID, foCode);

事情我已經試過

  1. 在運行時更改中通過java.io.tmpdir變量。 System.setProperty("java.io.tmpdir", "C:\\");

  2. 將網絡網絡文件擴展名添加到-Djava.io.tmpdir=c:\\temp不受限制的位置。

  3. 我試着將web網絡服務設置爲具有臨時文件權限的指定用戶運行。署長。

  4. 確保我有空閒的磁盤空間,並清理了c:\ windows \ temp文件夾。

  5. 確認tmp環境變量已設置爲其默認值。

  6. 我也嘗試從命令提示符處運行該服務,該命令提示符是用Run As Administrator選項打開的。

而且IOException還在徘徊。我有另一臺運行相同的代碼沒有問題的服務器(Windows Server 2012)。

其他人有任何想法我還可以嘗試解決此問題嗎?或者關於如何更徹底地調試問題以瞭解發生的事情的任何提示?

+0

這是Java 6還是Java 7? – fge

+0

@fge Java 7我相信。 – Trevor

+0

在2012服務器中,tmp文件位於哪個文件夾中? – AndreaTaroni86

回答

1

嘗試和創造的地方,而不是一個目錄你的home目錄下:

final Path tmpdir = Paths.get(System.getProperty("user.home"), "tmp"); 
Files.createDirectories(tmpdir); 
System.setProperty("java.io.tmpdir", tmpdir.toAbsolutePath().toString()); 

然後在那裏嘗試Files.createTempFile()

請注意,如果Files.createDirectories()引用的是不是目錄的現有文件,您將獲得FileAlreadyExistsException

3

一個可用於調試的工具是process monitor系統內部工具包。步驟是:添加一個過濾器來只監視你的進程(我認爲它就是你的javaw.exe),在錯誤發生後,通過進程監視器日誌中的文件活動,你可以找到進程如何查找文件以及進程搜索的目錄。如果進程在錯誤的目錄中搜索,則可以從日誌中找到它。

我剛剛使用這個工具來找出今天的JVM崩潰問題。

根據你問題的描述,我猜想你的代碼中間改變了進程的路徑變量,用另一個工具process explore你可以查看進程的路徑變量,這可能有所幫助。

相關問題