2014-01-07 34 views
1

我正在運行一個非常令人沮喪的錯誤,它應該是一個非常簡單的腳本(我知道java可能不會是最好的腳本,但我在這裏)。Java mkdir()不會爲一個字符串對象編寫目錄,而是用引號括起來的字符串

無論如何,我從csv文件中取出打印機的名稱,然後我試圖爲從該csv文件中取出的每臺打印機創建一個名爲的文件夾。問題是,如果我鍵入它這樣,我只能寫一個目錄打印機:

(new File("c:\\print\\printername").mkdir() 

,但如果我這樣做:

String whatever = "c:\\print\\printername" 
(new File(whatever)).mkdir() 

沒有目錄將被創建。我對這個問題可能會感到困惑。我已經重組了我的代碼幾次,試圖追蹤這個問題,並試圖在mkdir()和mkdirs()之間切換,但仍然沒有任何結果。這裏是我的代碼

public static void main(String[] args) throws FileNotFoundException{ 
    Scanner printers = new Scanner(new File("C:/Users/ransom/Desktop/printers.csv")); 
    printers.useDelimiter("\n"); 
    String printerPath = ""; 

    //new File("C:\\printer\\ISS114-Xerox4150PS").mkdir(); 

    while(printers.hasNext()){   
     printerPath = "C:\\printer\\"+printers.next(); 
     if(!(new File(printerPath)).mkdir()){ 
      System.out.println(printerPath); 
     } 
    } 

} 

被註釋掉是當腳本工作的一個例子線,但如果它得到該行的循環不會創建一個目錄。有任何想法嗎?

+0

Java 7:Files.createDirectories(dir,attrs)和Files.createDirectory(dir,attrs)。注意差異! –

回答

1

試一下(注意斜線):

String whatever = "c:/print/printername" 
(new File(whatever)).mkdir() 

告訴我們,如果它的工作。如果downvote說爲什麼(其他觀衆)。

+1

奇怪的是,在Windows上,它沒有任何區別。其他操作系統不喜歡'\\'並且從字面上理解它,但由於某種原因,在Windows上,分隔符是自動調整的... – MadProgrammer

+1

@Yoda我完全同意。不管平臺如何,我在17年內都沒有在Java中使用反斜槓。 – EJP

+1

@MadProgrammer你有這個回到前面。 '/'在Windows上奇蹟般地調整爲'\\'。因此,您不必在任何平臺上使用'\\'。 – EJP

1

上面提到的兩種方法(使用顯式字符串或字符串變量)的工作方式都是相同的。你似乎得到的問題是因爲父目錄不存在。

也就是說,如果該目錄"C:\\print"不存在,則mkdir()不會創建目錄使用mkdirs()"C:\\print\\aSubDir"

嘗試這也將創造所有必需的父目錄。

見這個例子("C:\\Temp已經存在):

public static void main(String[] args) throws FileNotFoundException 
{ 
    String path1 = "C:\\Temp\\print\\1"; 
    String path2 = "C:\\Temp\\print\\2\\2a"; 

    System.out.println("Attempt 1: " + new File("C:\\Temp\\print\\1\\").mkdir()); 
    System.out.println("Attempt 2: " + new File(path1).mkdir()); 
    System.out.println("Attempt 3: " + new File(path1).mkdirs()); 
    System.out.println("Attempt 4: " + new File(path2).mkdir()); 
    System.out.println("Attempt 5: " + new File("C:\\Temp\\print\\2\\2a").mkdir()); 
    System.out.println("Attempt 6: " + new File("C:\\Temp\\print\\2\\2a").mkdirs()); 
} 

給人的輸出:

Attempt 1: false 
Attempt 2: false 
Attempt 3: true 
Attempt 4: false 
Attempt 5: false 
Attempt 6: true 

編輯(感謝@MadProgrammer)

它也可能是由於該目錄已經存在的事實就好像你第二次運行上面的例子一樣,所有的都會返回false。所以你也可以添加一個檢查,如果在創建之前已經存在directoy File#exists()

+0

也可能是路徑已經存在... – MadProgrammer

+0

@MadProgrammer true,已編輯包含此項。 –

+0

如果您閱讀原文,我提到我嘗試了mkdir()和mkdirs()。問題不在於我得到混合真正的錯誤輸出,而是當我嘗試導航到該目錄時,沒有任何內容。 – SRansom

相關問題