繁体   English   中英

Linux和Windows中的java.io.File和路径

[英]java.io.File and paths in Linux and 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:是的,这是我对打印阵列的错误。 但是:为什么在不同目录下它的工作方式有所不同? 与第一个目录编程工作正常,第二个我得到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。

您需要使用一种特殊的方法来打印数组。 :P试试

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

它具有Windows和Linux相同的功能。

我不确定该程序如何在Windows中正常工作,它也不应该在Windows中正常工作。

方法dir.listFiles()返回File对象的数组,因此您必须使用类似以下内容的方法:

File[] files = dir.listFiles();

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

获得正确的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM