获取java中的文件完整路径

获取java中的文件完整路径,java,Java,当我将File文件传递给一个方法时,我试图获得它的完整路径,如File.getAbsolutePath()我总是得到相同的结果,无论我使用的是绝对路径还是规范路径path\u到我的工作区/projectName/filename而它不在那里,我如何获得文件的确切位置 多谢各位 详细信息: 以下是一些代码和解决方案(虽然不好,但可以正常工作): private static void doSomethingToDirectory(File factDir)引发IOException{ File[]

当我将
File文件
传递给一个方法时,我试图获得它的完整路径,如
File.getAbsolutePath()我总是得到相同的结果,无论我使用的是绝对路径还是规范路径
path\u到我的工作区/projectName/filename
而它不在那里,我如何获得文件的确切位置

多谢各位

详细信息:

以下是一些代码和解决方案(虽然不好,但可以正常工作):

private static void doSomethingToDirectory(File factDir)引发IOException{
File[]dirContents=factDir.listFiles();
if(factDir.isDirectory()&&dirContents.length>0){
for(int i=0;i
我在factDir为
src/main
的目录中循环,我只想处理TEMP\u COMPARE\u文件值的.txt文件,并将它们发送到process方法,该方法读取文件并对其进行处理

如果有人能提供更好的解决方案,我将不胜感激

这句来自的话可能会有所帮助:

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

我的解释是,如果您使用
新文件(“文件名”)
创建
文件
对象,其中
文件名
是相对路径,则即使调用
文件.getAbsolutePath()
,该路径也不会转换为绝对路径

更新:既然您发布了代码,我可以想出一些改进方法:

  • 您可以使用来查找所需的文件
  • 请注意,对于非目录对象,
    list
    listFiles
    返回
    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()
然后:

如果
文件
位于特定目录中,如
文件夹\\filename
完整路径将是

(new File(".").getCanonicalPath() + "\\folder\\filename")
(new File(".").getCanonicalPath() + "\\filename")
或者如果
文件
直接位于程序目录中: 完整路径将是

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

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

你确定它不在那里吗?你刷新文件树了吗?(如果使用eclipse;))您是如何创建该文件对象的?@Sebi当然创建了,@Peter是的,我创建了:)???答“是”并不是对我的问题的恰当回答:-/听起来你只是在实例化一个文件对象,但在你使用Writer或Outputstream写入文件之前,或者调用
createNewFile()
w0w Peter我必须明确地说,我认为这是我得到过的最好的答案之一,所以,你我的过滤器类建议减少了这么多代码,太神奇了。非常感谢你