【问题标题】:java.io.File and paths in Linux and WindowsLinux 和 Windows 中的 java.io.File 和路径
【发布时间】: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


【解决方案1】:

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

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

它与 Windows 和 Linux 做同样的事情。

【讨论】:

    【解决方案2】:

    我不确定程序在 windows 中如何正常运行,它也不应该在 windows 中运行。

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

    File[] files = dir.listFiles();
    
    for (File file : files) {
        System.out.println(file);
    }
    

    获得正确的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2011-05-09
      • 2021-12-07
      • 2020-10-05
      相关资源
      最近更新 更多