Java.io.File и пути в Linux и Windows

Я написал небольшую программу, которая берет путь к каталогу из командной строки и печатает все файлы и каталоги, которые помещаются в этот каталог. Но он отлично работает только для Windows. У меня есть что-то вроде этого:

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

Запуск в Windows (отлично работает):

java MyProg C:\mydir

Запуск в Linux:

java MyProg /home/user/mydir

И вместо списка файлов я получаю следующее:

[Ljava.io.File;@190690e

Что я делаю неправильно и где моя кросс-платформа?

UPD: Да, это была моя ошибка с массивом печати. Но: Почему это работает по-разному с разными каталогами? С первой программой dir работает нормально, со вторым я получил nullptr

maxim@maxim-VirtualBox:~$ java FileSearch /home/maxim/Downloads/archives/
maxim@maxim-VirtualBox:~$ 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);
 }
 }
 }
</string>

оба отдела имеют субдиры

UPD2: Я нашел проблему. listFiles() возвращает null, когда каталог пуст.

2 ответа

Вам нужно использовать специальный метод для печати массивов. : P Попробуйте

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

Он делает то же самое для Windows и Linux.


Я не уверен, как программа работает правильно в Windows, она также не должна работать в окнах.

Метод dir.listFiles() возвращает массив объектов File, поэтому вы должны использовать что-то вроде:

File[] files = dir.listFiles();

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

чтобы получить правильный результат.

licensed under cc by-sa 3.0 with attribution.