java - Java中如何自动检测文件位置?

标签 java java.util.scanner filepath

我只是想知道是否有任何方法可以让您的程序通过仅提供名称而无需像这样编写整个搜索路径来找到您想要使用的文件。

Scanner betalningsservice = new Scanner(new File("/afs/nada.kth.se/home/i/u1vxrjgi/betalningsservice.txt"));
        String  line1             = betalningsservice.nextLine();

您可以看到它的路径相当长,我希望程序能够检测到文件“betalningsservice.txt”,无论该文件位于计算机中的哪个位置(如果该文件已移动到其他地方)。大家有什么建议吗? :)

提前致谢

最佳答案

由于对于这个问题到底想要什么存在一些争论,我将发布另一个答案。

如果您使用的是 Java 8,则使用 Files.find 函数可以使查找文件变得更加简单。它的优点是能够限制搜索深度,控制搜索速度。这是一个将所有匹配文件的路径粘贴到列表中的示例。如果您找到多个匹配文件,您可以让用户选择正确的一个:

final String SEARCH_FILE = "betalningsservice.txt"; // the file you're looking for
final String SEARCH_ROOT = "/afs/nada.kth.se/home/i/"; // where to start the search (top folder)
final int SEARCH_DEPTH = 4; // how many nested subfolders to delve into
final List<Path> files = new LinkedList<>();
Files.find(Paths.get(SEARCH_ROOT), SEARCH_DEPTH, (p, a) -> p.endsWith(SEARCH_FILE))
        .forEach(e -> files.add(e));

执行所有搜索逻辑的一个大语句是否更具可读性或可读性较差是有争议的,但这就是适合您的 Java 8。

如果您想获得高级体验,还可以将 FileVisitOption 附加到 find 函数的参数列表中(例如,跟踪符号链接(symbolic link))。

值得注意的是,在 Java 8 中,Path 通常取代了 File 作为表示文件和文件夹的方式,因此出现了路径列表。一旦您选择了正确的路径(我们会说它位于名为 path 的变量中),您就可以像使用文件一样使用它:

Scanner betalningsservice = new Scanner(path);

其余如前。

关于java - Java中如何自动检测文件位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251727/

相关文章:

java - JList 仅显示有限的行数

java - 想要从文件扫描的行中获取单独的标记。 java

Java从String解析许多子串实例

macos - 如何在 Mac OS X v10.10 (Yosemite) 中快速复制文件路径?

c# - 为什么System.IO是这样实现的

javascript - 包含与号 (&) 字符的文件路径

java - "cURL -u"使用 Apache HTTPClient 的 API key 授权

java - EMR Spark 在 java main 中工作,但不在 java 函数中工作

java - 基于包含 MappedSuperclass 的元模型的 JPA EntityGraph 不可能吗?

java - 计算单词中的字符