我为“ 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" )).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top