繁体   English   中英

在java中获取文件的完整路径

[英]Get file full path in java

当我将File file传递给方法时,我正试图获得像file.getAbsolutePath(); 我总是得到相同的结果,无论我使用绝对路径或规范路径PATH_TO_MY_WORKSPACE/projectName/filename并且它不存在,我怎样才能获得文件的确切位置?

谢谢

细节:

这是一些代码和这个解决方案(它很糟糕,但它的工作):

 private static void doSomethingToDirectory(File factDir) throws IOException {
            File[] dirContents = factDir.listFiles();

            if(factDir.isDirectory() && dirContents.length > 0){
                for (int i = 0; i < dirContents.length; i++) {
                    for (String str : dirContents[i].list()) {
                        if(str.equals(TEMP_COMPARE_FILE)){
                            process(new File(dirContents[i].getAbsolutePath() + "\\" + str));
                        }
                    }
                }           
            }
        }

我正在循环通过factDir为src/main目录,我正在寻找只有TEMP_COMPARE_FILE值的BeProcessed.txt文件,并且我将它们发送到读取文件并对其进行处理的进程方法。

如果有人能够更好地解决问题我会很高兴

来自Javadoc的引用可能会有所帮助:

路径名,无论是抽象的还是字符串形式,可以是绝对的相对的 绝对路径名是完整的,因为不需要其他信息来定位它表示的文件。 相反,相对路径名必须根据从其他路径名获取的信息来解释。 默认情况下, java.io包中的类始终解析当前用户目录的相对路径名。 此目录由系统属性user.dir命名,通常是调用Java虚拟机的目录。

我解释这一点,如果您使用new File("filename")创建File对象,其中filename是相对路径,即使通过调用file.getAbsolutePath() ,该路径也不会转换为绝对路径。

更新:现在你发布了代码,我可以想办法改进它:

  • 您可以使用FilenameFilter来查找所需的文件,
  • 请注意, listlistFiles为非目录对象返回null ,因此我们需要额外检查,
  • 你也可以在内部循环中再次使用listFiles() ,从而避免使用手工组装路径创建新的File对象。 (顺便说一下,手动将\\\\附加到路径是不可移植的;正确的方法是使用File.separator )。

最终的结果是

private static void doSomethingToDirectory(File factDir) throws IOException {
  if (factDir.isDirectory()) {
    for (File file : factDir.listFiles()) {
      if (file.isDirectory()) {
        for (File child : file.listFiles(new MyFilter())) {
          process(child);
        }
      }
    }           
  }
}

class MyFilter implements FilenameFilter {
  public boolean accept(File dir, String name) {
    return name.equals(TEMP_COMPARE_FILE);
  }
}

请注意,此代码模仿原始代码的行为,就像我理解的那样; 最值得注意的是,它只在factDir直接子目录中找到具有正确名称的文件,非递归。

我认为,当且仅当文件位于程序目录中时,它才有助于您。

首先你得到程序目录:

new File(".").getCanonicalPath()

然后 :

如果filefolder\\\\filename之类的特定目录中,则完整路径将是

(new File(".").getCanonicalPath() + "\\folder\\filename")

或者如果file直接位于程序目录中:完整路径将是

(new File(".").getCanonicalPath() + "\\filename")

我希望这个答案可以帮助你:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM