2009-10-22 63 views
0

從以前的問題繼,因爲當我使用下面的代碼的一些原因:無法創建C文件: TEMP

final File tmpDir = new File("C:/TEMP/", zipFile.getName()); 

    if(!tmpDir.mkdir() && tmpDir.exists()) { 
     System.err.println("Cannot create: " + tmpDir); 
     System.exit(0); 
    } 

我得到一個錯誤(無法創建:C:\ TEMP \ aZipFile )但是,如果我使用以下內容:

final File tmpDir = new File(System.getProperty("java.io.tmpdir"), zipFile.getName()); 

    if(!tmpDir.mkdir() && tmpDir.exists()) { 
     System.err.println("Cannot create: " + tmpDir); 
     System.exit(0); 
    } 

它完美地工作。我的問題是我想使用C:\ TEMP,因爲這與我正在處理的其餘項目一致。

我再次使用Windows XP和JDeveloper IDE的Java 1.4。

回答

3
if(!tmpDir.mkdir() && tmpDir.exists()) 

不該「T這是:

if(!tmpDir.mkdir() && !tmpDir.exists()) 
+0

爲什麼upvote?這是否回答這個問題? – Graviton 2009-10-22 09:35:40

+0

是的,句子的第一部分嘗試創建臨時目錄,如果它創建則返回true,如果它不能創建或已經存在,則返回false,此可能性由if的第二部分覆蓋。所以只有當臨時目錄不存在並且不能創建時if才爲真 – Telcontar 2009-10-22 09:50:22

0

是因爲你沒有寫訪問"C:/TEMP/"或TEMP文件夾不存在?

1

好吧,如果System.getProperty("java.io.tmpdir")不返回 'C:\ TEMP' 這是不一樣的。雖然我建議依靠java.io.tmpdir,但您也可以確保C:\ TEMP存在 - 或者根據需要創建它:``;

File temp = new File("C:/TEMP/"); 
if (!temp.exists()) temp.mkdir(); 
File tmpDir = new File(temp, zipFile.getName()); 

或者,您可以更改您的代碼

final File tmpDir = new File(System.getProperty("java.io.tmpdir"), zipFile.getName()); 

// note the change from mkdir to mkdirs 
if(!tmpDir.mkdirs() && !tmpDir.exists()) { 
    System.err.println("Cannot create: " + tmpDir); 
    System.exit(0); 
} 

編輯:我剛看到由atomice的答案,他是對的:它是!tmpDir.exists()而不是tmpDir.exists()

0

您是否將'System.getProperty(「java.io.tmpdir」)'的結果與您正在嘗試的結果進行了比較? 另外,在WindowsXP上,我會選擇「C:\ Temp \」作爲目錄名稱。

0

是否有名爲臨時目錄你想,一個文件被鎖定?

1

爲什麼不使用File.createTempFile,是不是你嘗試歸檔什麼?