获取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我必须明确地说,我认为这是我得到过的最好的答案之一,所以,你我的过滤器类建议减少了这么多代码,太神奇了。非常感谢你