7

我为“Debian Linux”创建了一个 java 应用程序。现在我希望该应用程序读取放置在指定该应用程序的 jar 文件的目录中的文件。那么在 File Object 的参数中指定什么?

File fileToBeReaded = new File(...);

指定什么作为上述语句的参数以指定表示应用程序的 jar 文件所在路径的相对文件路径?

4

6 回答 6

8

如果你知道文件名,当然很简单

new File("./myFileName")

如果您不知道名称,可以使用 File 对象的 list() 方法获取当前目录中的文件列表,然后选择您想要的文件。

于 2009-11-07T13:34:52.807 回答
7

您是在询问转义字符问题吗?

如果是这种情况,则使用正斜杠而不是反斜杠,例如

“C:/Users/You/Desktop/test.txt”

代替

"C:\Users\You\Desktop\test.txt"

于 2012-07-04T03:53:27.890 回答
5

使用相对路径java.io.File完全依赖于当前工作目录。这与您执行 JAR 的方式不同。例如,如果您在/foo其中执行 JAR,java -jar /bar/jar/Bar.jar那么工作目录仍然是/foo. 但是如果你cd/bar/jar执行,java -jar Bar.jar那么工作目录就是/bar/jar.

如果您想要 JAR 所在的根路径,其中一种方法是:

File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());

这将返回 JAR 文件的根路径(即类路径根)。如果您将资源相对于类路径根目录放置,则可以按如下方式访问它:

File resource = new File(root, "filename.ext");

或者,您也可以只使用:

File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
于 2009-11-07T13:40:06.303 回答
3

我认为这应该可以解决问题:

File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");

这样,将在属性中搜索该文件,该user.dir属性将是您应用程序的工作目录。

于 2009-11-07T13:34:24.677 回答
2

你可以让你的类加载器给你 jar 的位置:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

...但我建议将您要查找的文件放入 jar 文件中并将其作为资源 ( getClass().getResourceAsStream( "myFile.txt" )) 读取。

于 2009-11-07T13:37:13.503 回答
1

在 IntelliJIDEA 上右键单击文件,然后复制绝对路径,然后在双引号中将路径粘贴为 filePath。例如它应该是这样的:

"C:\\Users\\NameOfTheComputerUser\\IdeaProjects\\NameOfTheProject\\YourSubFolders\\name-of-the-file.example"
于 2021-01-16T11:38:50.430 回答