我编写了一个小程序,它从命令提示符获取目录的路径,并打印放在此目录中的所有文件和目录。但它仅适用于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
我做错了什么,我的跨平台在哪里?
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);
}
}
}
两个目前都有子目录
UPD2:我发现了问题。当directory为空时,listFiles()返回null。
答案 0 :(得分:0)
您需要使用特殊方法来打印数组。 :P尝试
System.out.println(Arrays.toString(dir.listFiles()));
它与Windows和Linux完全相同。
答案 1 :(得分:0)
我不确定程序在Windows中是如何正常工作的,它也不适用于Windows。
方法dir.listFiles()
返回File
个对象的数组,因此您必须使用以下内容:
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file);
}
获得正确的输出。