2014-03-01 53 views
0

我編寫了一個小程序,它從命令提示符接收目錄的路徑並打印放置在此目錄中的所有文件和目錄。但它只適用於Windows。我有這樣的事情:在Linux和Windows中的java.io.File和路徑

path = args[0];  
File dir = new File(path); 
System.out.println(dir.listFiles()); 

啓動的窗口(正常工作):

java MyProg C:\mydir 

啓動在Linux上:

java MyProg /home/user/mydir 

,而不是文件,我得到這個列表以及:

[Ljava.io.File;@190690e 

我在做什麼錯以及我的跨平臺?


UPD:是的,這是我的打印陣列的錯誤。但是: 爲什麼它對不同的目錄有不同的作用?隨着第一DIR PROGRAMM正常工作,與第二我nullptr

[email protected]:~$ java FileSearch /home/maxim/Downloads/archives/ 
[email protected]:~$ java FileSearch /home/maxim/Install/ 
Exception in thread "main" java.lang.NullPointerException 
    at FileSearch.saveFilesInList(FileSearch.java:21) 
    at FileSearch.saveFilesInList(FileSearch.java:25) 
    at FileSearch.saveFilesInList(FileSearch.java:25) 
    at FileSearch.saveFilesInList(FileSearch.java:25) 
    at FileSearch.saveFilesInList(FileSearch.java:25) 
    at FileSearch.saveFilesInList(FileSearch.java:25) 
    at FileSearch.saveFilesInList(FileSearch.java:25) 
    at FileSearch.saveFilesInList(FileSearch.java:25) 
    at FileSearch.main(FileSearch.java:88) 

這裏是我的功能:

private static void saveFilesInList(String path, ArrayList<String> files) 
       throws IOException 
    { 
      File dir = new File(path); 
      File[] list = dir.listFiles(); 

[21]  for (File f : list) { 
       if (f.isFile()) { 
        if (isUnic(f.getName(), files)) files.add(f.getName()); 
       } else { 
[25]    saveFilesInList(f.getCanonicalPath(), files); 
       } 
      } 
    } 

兩個迪爾斯有子目錄

UPD2:我發現這個問題。當目錄爲空時,listFiles()返回null。

+0

你認爲應該打印什麼?爲什麼? –

+0

它在Windows中打印什麼? – wumpz

+0

哇)舒爾......它是陣列。這是正確的工作。當我將File dir傳入我的函數時,我的第一個麻煩實際上是NullPointerException。 dir!= null,但無論如何,我都有異常: File [] list = dir.listFiles(); (文件f:列表){ ... – Alendorff

回答

0

您需要使用特殊的方法來打印數組。 :P試試

System.out.println(Arrays.toString(dir.listFiles())); 

它的功能與Windows和Linux完全相同。

0

我不確定程序在Windows中是如何正常工作的,它不應該在Windows中工作。

dir.listFiles()返回File對象數組的方法,因此必須使用類似:

File[] files = dir.listFiles(); 

for (File file : files) { 
    System.out.println(file); 
} 

得到正確的輸出。