【问题标题】:Using java, what is the most resource efficient way to pull a list files names from a folder location使用java,从文件夹位置提取列表文件名的最高效的方法是什么
【发布时间】:2015-04-15 12:55:00
【问题描述】:

使用 Java,从文件夹位置提取文件名“列表”的最节省资源的方法是什么。目前我正在使用以下代码:-

           File[] files = new File(folderLocation).listFiles();

在遍历文件数组并仅将文件名转储到我的应用程序使用的哈希中之前。因此,请记住,我只需要文件名,是否有一种更节省内存的方法来执行此操作。

编辑:

  • 我没有使用 Java 7
  • 我实际上并没有遇到内存错误,但我开发的方法需要很长时间才能运行(20 分钟),以至于对于我正在开发的应用程序来说这不是一个现实的选择。

【问题讨论】:

标签: java file memory io


【解决方案1】:

您可以使用返回 String[] 的(new File(folderLocation)).list()。每个字符串是路径+分隔符+文件名。您可以从此字符串中提取文件名。

【讨论】:

    【解决方案2】:

    你需要区分文件和目录吗?如果没有,您可以使用 File 中的 list() 函数返回一个字符串数组,该数组命名此抽象路径名表示的目录中的文件和目录。然后,您可以使用该列表轻松构造一个 HashSet。例如,

    String[] files = new File(folderLocation).list();
    Set<String> mySet = new HashSet<String>(Arrays.asList(files));
    

    还有一个 list(FilenameFilter filter) 函数,它接受一个文件名过滤器并返回一个字符串名称列表。但是,它不允许您根据文件/目录进行过滤。

    【讨论】:

    • 这似乎快了很多谢谢,如果我得到更改以进行小测试,我将在此处添加结果。
    【解决方案3】:

    使用 Java 7+ 有:

    final Path dir = Paths.get(folderLocation);
    
    final List<String> names = new ArrayList<>();
    
    try (
        final DirectoryStream<Path> dirstream
            = Files.newDirectoryStream(dir);
    ) {
        for (final Path entry: dirstream)
            list.add(entry.getFileName());
    }
    

    另外,好吧,File.listFiles() just doesn't work

    【讨论】:

    • 我们目前不使用 Java 7,但我会记住这一点,谢谢!
    【解决方案4】:

    您可以查看Path

    javadoc中提到过

    路径 getFileName()
    将此路径表示的文件或目录的名称作为 Path 对象返回

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 2012-02-27
      • 2020-04-09
      • 1970-01-01
      • 2023-03-05
      • 2010-09-13
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多