如何在Java中从文件夹中获取单个文件?

4
这个想法是只使用一个文件,但我不想列出所有的文件。我有指定文件夹的地址,但没有文件夹的名称。
基本上我想要:
findFileInFolder(String folderName) --- 这个方法返回一个随机文件名或文件夹中最旧的文件
有人试过这样做吗?有什么办法可以避免将所有文件列在数组中,然后取第一个文件?
添加:
以防我表达不清楚(我的英语真的很烂。如果我听起来自大或咄咄逼人,请原谅我,这真的不是我的意图)。该文件不是由人选择的,而是由计算机自动选择的,除了返回文件名的方法之外,不会询问或显示文件。
String findFileInFolder(String folderName)
就像我所说的,它是为了节省内存和处理器的使用,因为这是一个辅助进程,而不是项目的主要进程,所以如果我必须读取超过一千个文件,它将显著降低我的项目性能:(
谢谢;)
更新:该程序正在运行在不同的计算机上,所以如果我只能访问目录而不“思考”读取哪个文件,那就太好了。=D
希望最后一次更新:对不起打扰你们了 :)
根据我在答案中所读到的,没有办法。我的问题是:除了创建一个包含索引的文本文件并仅使用第一行之外,您认为还有什么好的替代方法吗?

将文件读入数组,然后随机选择一个条目有什么问题?通常没有“给我一个随机文件”的文件系统方法,因此您必须找出哪些文件可用 - 通过将它们读入数组。 - relet
没有实际问题,但我想将RAM的使用减少到最小,并且将此部分的处理过程也应用于程序,如果我必须列出超过一千个文件的数组,那将是一个显著的数字。 - Saikios
如果您期望目录中有很多文件,您可以查看java.nio.file.DirectoryStream。 - relet
如果我使用那个,我不是还得读整个目录吗?(很抱歉我的英语),谢谢回答 =( - Saikios
4个回答

2
我决定使用这段代码,虽然不完全符合我的要求,但目前它可以工作。
  public static String getFileToCrawl(String directory){
      File dir = new File(directory);

      String[] children = dir.list();
      if (children == null) {
          return "";
      } else {
          int i=0;
          String filename = children[i];
          while (i<children.length && !filename.contains(".txt")){
              i++;
              filename = children[i];
          }
          return filename;
      }

  }

如果有人喜欢它或知道如何改进此代码,非常欢迎;)如果您想使用它,请随意:D

1

0

在当前版本的Java中,除了列出所有文件并选择所需内容外,没有其他方法可以实现此操作。如果您可以使用Java 7,则有一个FileVisitor类,可以遍历文件夹树而无需列出所有文件。


我很无奈,但我的另一个选择是制作文件索引并逐个删除,但这不是我的想法,因为这个神奇的文件会影响我的性能。 :-S - Saikios
你有对File.list()性能进行过基准测试吗?它是一个本地方法,只返回文件名数组,所以1000个字符串并不算太多。 - Denis Tulskiy
数千只是说一些,可能会有更多和不同的进程和计算机同时运行,我会在信息中添加它。 - Saikios

-1

我知道这是一个旧帖子,但这里有一种快速而简单的方法:

import java.io.File;
import java.util.Arrays;
import java.util.Collections;

public class Shuffle {
   public static void main(String[] argv) 
   throws Exception {

      File dir = new File(".");
      String[] children = dir.list();
      Collections.shuffle(Arrays.asList(children));
      System.out.println(children[0]);
   }   
}

2
这正是与OP所要求的完全相反的,他说:“有什么想法可以避免将所有文件列在数组中,然后取第一个文件?” - b4hand
我没有列出任何东西,只是从文件夹中随机选择一个文件。这不是他要求的吗? - Paul M.
1
这行代码 String[] children = dir.list(); 是用来列出文件夹中的内容。 - b4hand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接