当前位置: 首页 > 知识库问答 >
问题:

我如何检查,使用Java,一个给定的文件路径下(任何级别深)给定的目录路径

双子民
2023-03-14

给定两个字符串——一个表示目录路径,另一个表示文件路径——检查文件是否存在于给定目录下(可以是任意深度)的最有效方法是什么。

我首先将两者转换为File对象,并比较它们的规范路径

// null checks etc. omitted for brevity
File file = new File(filePath);
String fileCanonicalPath = file.getCanonicalPath();

File dir = new File(dirPath);
String dirCanonicalPath = dir.getCanonicalPath();

return fileCanonicalPath.startsWith(dirCanonicalPath);

但我不相信这实际上是最准确的方法 - 我想依靠系统考虑的内容而不是比较字符串。

然后,我尝试将两者都转换为File对象,然后递归地调用文件上的get

但这似乎效率相当低。

有没有更好的方法——更有效、更客观地正确——来做到这一点?


共有2个答案

公冶经纶
2023-03-14

我认为您必须首先检查文件和目录是否存在

File file = new File(filePath);
File dir = new File(dirPath);
if(file.exists() && !file.isDirectory()) { 
     if(dir.exists() && dir.isDirectory()) {
         // here you can compare if file is inside directory
         String fileCanonicalPath = file.getCanonicalPath();
         String dirCanonicalPath = dir.getCanonicalPath();
         return fileCanonicalPath.startsWith(dirCanonicalPath);
     }
}
return false;
魏誉
2023-03-14

书中有一个主题:Java完整的参考指南(第十二版)在(探索NIO)季节,它是“使用walkFileTree()列出目录树”,它解释了java解决方案,以列出并做任何你想用目录树做的事情。

试着阅读一下java的walkFileTree()方法,它会简单地解决你的问题。< br >请随意询问您需要知道的任何问题。

 类似资料:
  • 给定两个字符串 - 一个表示目录路径,另一个表示文件路径 - 检查文件是否存在于给定目录下(可以是任何级别)的最有效方法是什么。 我首先将两者转换为 对象,并比较它们的规范路径 但我不相信这实际上是最准确的方法——我想依靠系统的考虑,而不是比较字符串。 然后,我尝试将两者都转换为对象,然后递归地调用文件上的

  • 我有一个场景,比如,如果文件夹第一次不存在,必须在特定位置创建一个带有时间戳的新文件夹。然后我必须在新创建的文件夹中写入文件。 为了在给定位置下创建新文件夹,我编写了以下代码,该代码不创建文件夹,返回FALSE。 现有路径:D:\工作\POC\输出\ 我的当前Java版本:1.6

  • 问题内容: 我试图找到给定的路径是否可能是使用java的另一个路径的子级。这两个路径可能不存在。 说是可能的孩子。 目前,我正在与 问题答案: 您还可以使用 java.nio.file.Path 轻松完成此操作。该 java.nio.file.Path.startsWith 方法似乎是处理所有可能的情况。 例: 输出 如果需要更高的可靠性,可以使用“ toRealPath”代替“ toAbsolu

  • 我想检查路径是文件还是目录。如果是目录,那么将目录和文件分别记录下来。稍后我想将它们作为json对象发送。 nodejs binding.lstat(PathModule._Makelong(路径)) 更新:找到解决方案。我必须这样添加testFolder+文件:

  • 问题内容: 我正在从网上下载一个zip文件。它包含文件夹和文件。使用解压缩他们和。将文件名指定为。 所以我正在创造新的 但问题是它引发了异常:。我知道它正在创建子文件夹和。 我的问题是:如何通过路径上方创建包含子目录的文件? 问题答案: 用这个: 尽管您可以不检查结果而做,但是检查操作的返回值被认为是最佳实践。因此,首先检查现有目录,然后检查是否成功创建(如果尚不存在)。 参考: File.get

  • 我急需一个建议,我到底哪里出了问题 我有servlet api。jar@E:\J2EE\apache-tomcat-6.0.18\lib E:\J2EE\apache-tomcat-6.0.18\lib\servlet api。罐子 我试图运行一个Servlet类"TouchServlet.java"这是在 E:\J2EE\apache-tomcat-6.0.18\webapps\TouchSer