在java中获取文件路径

在java中获取文件路径,java,file,Java,File,java程序有没有办法确定它在文件系统中的位置?您可以使用它。可通过以下方式获取。反过来,可通过以下方式获得 这将返回有问题的类的确切位置 更新:根据评论,它显然已经在类路径中。然后,您可以只使用传递根包相对路径的路径 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL resource = classLoader.getResource("filename.ext"); File file

java程序有没有办法确定它在文件系统中的位置?

您可以使用它。可通过以下方式获取。反过来,可通过以下方式获得

这将返回有问题的
类的确切位置

更新:根据评论,它显然已经在类路径中。然后,您可以只使用传递根包相对路径的路径

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL resource = classLoader.getResource("filename.ext");
File file = new File(resource.getPath());
// ...
您甚至可以使用
InputStream
获取它

这也是使用打包资源的正常方式。如果它位于包内,则使用例如
com/example/filename.ext

如果要获取当前运行程序的“工作目录”,则只需使用:

new File("");

对我来说,当我知道文件的确切名称时,这就起了作用:

File f=新文件(“OutFile.txt”)
System.out.println(“f.getAbsolutePath()=”+f.getAbsolutePath())


或者也有这样的解决方案:

+1,但请注意ProtectionDomain.getCodeSource()和CodeSource.getLocation()都可以为null。@bMail:当它使用设计糟糕的自制类加载器加载时,或者当它从某个外部流源加载时,它可能确实返回null。但这通常不适用于“混凝土”带有
main()
的Java程序。这确实可以完成这项工作,但看起来不太好。我需要做的是加载一个配置文件,该文件需要与我的jar位于同一文件夹中,但可以从任何位置运行。这是获取文件位置信息的正确方法吗?那么它已经在类路径中了?然后使用类加载器。我更新了我的答案。getResourceAsStream建议很好。仅供参考,getResource将返回“jar:file:path!/resource”,所以您需要在传递到文件之前对其进行解构。即使假定是基于目录的类路径,getResource中的URL.getPath()也将是URL编码的(例如,“程序%20Files”),因此在转换为文件之前,您需要解码(或只是将URL转换为URI)。(很抱歉这么迂腐;我在类加载器支持部门工作了三年,看到/体验了所有这些细微差别带来的痛苦:-)。工作目录不一定是程序所在的位置。
InputStream input = classLoader.getResourceAsStream("filename.ext");
// ...
new File("");