[英]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()
,该路径也不会转换为绝对路径。
更新:现在你发布了代码,我可以想办法改进它:
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()
然后 :
如果file
在folder\\\\filename
之类的特定目录中,则完整路径将是
(new File(".").getCanonicalPath() + "\\folder\\filename")
或者如果file
直接位于程序目录中:完整路径将是
(new File(".").getCanonicalPath() + "\\filename")
我希望这个答案可以帮助你:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.