如何在Java中指定filepath?
-
18-09-2019 - |
题
我为“ Debian Linux”创建了Java应用程序。现在,我希望该应用程序读取放置在指定该应用程序的JAR文件的目录中的文件。那么,在文件对象的参数上可以指定什么?
File fileToBeReaded = new File(...);
要指定上述语句的参数,以指定代表应用程序的JAR文件的路径相对文件epath?
解决方案
如果您知道文件的名称,那当然只是
new File("./myFileName")
如果您不知道名称,则可以使用文件对象的列表()方法在当前目录中获取文件列表,然后选择所需的文件。
其他提示
使用相对路径 java.io.File
完全取决于当前的工作目录。这与您执行罐子的方式不同。例如,如果您在 /foo
然后您执行罐子 java -jar /bar/jar/Bar.jar
那么工作目录仍然 /foo
. 。但是如果你 cd
至 /bar/jar
并执行 java -jar Bar.jar
那么工作目录是 /bar/jar
.
如果您想要罐子所在的根路径,其中之一就是:
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
这将返回JAR文件的根路径(IOW classPath root)。如果您将资源相对于classPath root放置,则可以按以下方式访问它:
File resource = new File(root, "filename.ext");
另外,您也可以使用:
File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
我认为这应该可以解决:
File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");
这样,将在文件中搜索文件 user.dir
属性,这将是您的应用程序的工作目录。
您是在问逃生角色问题吗?
如果是这种情况,请使用前向斜线而不是向后斜线
“ c:/users/you/desktop/test.txt”
代替
“ c: users you desktop test.txt”
您可以要求您的classloader给您罐子的位置:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
...但是我建议将您要寻找的文件放入罐子中的文件中,然后将其阅读为资源(getClass().getResourceAsStream( "myFile.txt" )
).