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

时间:2014-06-16 20:30:40

标签: 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"文件位于计算机中的位置(如果文件已移动到其他位置)。任何提示家伙? :)

提前致谢

3 个答案:

答案 0 :(得分:1)

由于在这个问题中对于究竟需要什么有一些争论,我将发布另一个答案。

如果您正在使用Java 8,则使用Files.find功能可以更轻松地查找文件。它的优点是能够限制搜索的深度,从而控制搜索速度。这是一个将所有匹配文件的路径粘贴到List中的示例。如果您找到多个匹配文件,则可以让用户选择正确的文件:

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));

关于完成搜索逻辑的一个大statement语句是否更具可读性或更低可读性,但是那个Java 8适合于你,这是值得商榷的。

如果您想要提升,还可以将FileVisitOption附加到find功能的参数列表中(例如,按照符号链接)。

值得注意的是,在Java 8中,Path通常将File替换为表示文件和文件夹的方式,因此路径列表。一旦您选择了正确的路径(我们将其称为path中的变量),您可以使用它与使用文件的方式类似:

Scanner betalningsservice = new Scanner(path);

其余的就像以前一样。

答案 1 :(得分:0)

没有实用/可靠的方法可以在计算机上的任何位置找到该文件。 但是,如果您知道工作目录,则可以使用相对文件路径。因此,如果您的工作目录为/afs/nada.kth.se/home/i/u1vxrjgi,则可以通过new File("betalningsservice.txt")引用该文件。同样,如果您的工作指针为/afs/nada.kth.se/home/i,则可以将该文件称为new File("u1vxrjgi/betalningsservice.txt")

另一种选择是从类路径中读取。这可以通过将类加载器设置为get a resource来实现。

答案 2 :(得分:0)

File也可以使用相对路径创建文件。只是不要用斜杠开始文件名。例如,如果您从文件夹&#34; /afs/nada.kth.se/home/i/u1vxrjgi /&#34;运行该程序,您可以使用:

new File("betalningsservice.txt")

...那样就能找到你想要的文件。