【问题标题】:How to specify a directory when creating a File object?创建 File 对象时如何指定目录?
【发布时间】:2012-11-13 12:58:03
【问题描述】:

这应该是一个非常简单的问题,但 Google + 我的代码不起作用。

在 Windows 上的 Eclipse 中,我希望我的程序查看某个文件夹中的内容。该文件夹直接位于项目文件夹内,与.settingsbinsrc 等处于同一级别。我的文件夹名为surveys,这是我希望我的File 对象指向的文件夹.

我不想指定完整路径,因为我希望它可以在我的两台计算机上运行。只是我项目中的路径。

我正在尝试这段代码,但它不起作用 - names[] 将返回 null。是的,我在surveys 中有一些文件夹和测试垃圾。

File file = new File("/surveys");
    String[] names = file.list();

    for(String name : names)
    {
        if (new File("/surveys/" + name).isDirectory())
        {
            System.out.println(name);
        }
    }

我确定我的错误在我传递给 File 的字符串中,但我不确定出了什么问题?

【问题讨论】:

  • 你需要给出绝对路径。
  • 表示完整路径?没有办法获取本地路径吗?那么为什么当我创建一个文件并在没有指定路径的情况下写入它时,它会进入最广泛的文件夹中呢?

标签: java eclipse file formatting directory


【解决方案1】:

在使用 file.list() 之前确保你的文件是一个目录,否则你会得到一个讨厌的 NullPointerException。

File file = new File("surveys");
if (file.isDirectory()){
   ...
}

if (names!=null){
   ...
}

【讨论】:

    【解决方案2】:

    如果您检查了文件的完整路径

    System.out.println(file.getCanonicalPath())

    画面会立即变得清晰。 File.getCanonicalPath 为您提供了完整的路径。请注意,File 对路径进行规范化,例如在 Windows 上,“c:/file”被转换为“C:\file”。

    【讨论】:

      【解决方案3】:

      在您的问题中,您没有指定您正在运行的平台。在非 Windows 上,前导斜杠表示绝对路径。最好去掉前面的斜线。试试这个:

      File file = new File("surveys");
      System.out.println("user.dir=" + System.getProperty("user.dir"));
      System.out.println("file is at: " + file.getCanonicalPath());
      String[] names = file.list();
      
      for(String name : names)
      {
          if (new File(file, name).isDirectory())
          {
              System.out.println(name);
          }
      }
      

      确保在您的运行配置中,程序从项目目录运行(user.dir = <projects>

      【讨论】:

      • 看起来很棒!非常感谢。
      猜你喜欢
      • 2012-05-26
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多