java程序有没有办法确定它在文件系统中的位置?
答案 0 :(得分:12)
您可以使用CodeSource#getLocation()
。 CodeSource
可以ProtectionDomain#getCodeSource()
使用ProtectionDomain
。 Class#getProtectionDomain()
依次由ClassLoader#getResource()
提供。
URL location = getClass().getProtectionDomain().getCodeSource().getLocation();
File file = new File(location.getPath());
// ...
这会返回相关Class
的确切位置。
更新:根据评论,它显然已经在类路径中了。然后,您可以使用ClassLoader#getResourceAsStream()
来传递根包相对路径。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL resource = classLoader.getResource("filename.ext");
File file = new File(resource.getPath());
// ...
您甚至可以使用{{3}}将其作为InputStream
获取。
InputStream input = classLoader.getResourceAsStream("filename.ext");
// ...
这也是使用打包资源的常规方式。如果它位于包内,则使用例如com/example/filename.ext
。
答案 1 :(得分:0)
对我而言,当我知道文件的确切名称时,这是有效的:
File f = new File("OutFile.txt");
System.out.println("f.getAbsolutePath() = " + f.getAbsolutePath());
或者也有这个解决方案:http://docs.oracle.com/javase/tutorial/essential/io/find.html
答案 2 :(得分:-1)
如果你想获得当前正在运行的程序的“工作目录”,那么只需使用:
new File("");