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

标签 java linux windows file-io cross-platform

我编写了一个小程序,它从命令提示符获取目录的路径,并打印放置在该目录中的所有文件和目录。但它仅适用于 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);
                }
            }
    }

两个目录都有子目录

UPD2:我发现了问题。当目录为空时,listFiles() 返回 null。

最佳答案

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

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

它与 Windows 和 Linux 执行相同的操作。

关于Linux 和 Windows 中的 java.io.File 和路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22121343/

相关文章:

linux - Linux cli 简介;输出重定向

linux - 无服务器架构它是如何工作的,基于什么标准

javascript - 是否可以运行不在文件中的node.js脚本?

r - 检查两个文件路径是否解析为同一个文件

java - Java中图像转换为字节数组

java - Android 包含参数 - 数据绑定(bind)不解析变量

linux - ldap 在已知树结构中查询 OU

c++ - 让两个 dll 共享一个静态库的陷阱是什么?

java - 在Java中以 block 的形式发送文件

java - 跳棋棋盘 : Representing a two-dimensional array of user-created abstract data types in Java