【发布时间】:2014-03-01 22:39:52
【问题描述】:
我编写了一个小程序,它从命令提示符获取一个目录的路径,并打印该目录中的所有文件和目录。但它仅适用于 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 programm 工作正常,第二个我得到 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);
}
}
}
两个目录都有子目录
UPD2:我发现了问题。当目录为空时,listFiles() 返回 null。
【问题讨论】:
-
你认为它应该打印什么以及为什么?
-
在 Windows 中打印什么?
-
哇)舒尔......这是阵列。它的工作正确。当我将文件目录传递给我的函数时,我的第一个麻烦实际上是 NullPointerException。 dir != null,但无论如何我都有异常,什么时候做: File[] list = dir.listFiles(); for (文件 f: 列表) { ...
-
我尝试在将 dir.listFiles() 传递给函数之前和之后打印它。之前:我只在当前目录中获得了文件列表,没有嵌套目录和文件。之后:我得到了所有嵌套文件和目录的列表...
标签: java linux windows file-io cross-platform