java - 使用相对路径访问并行资源文件夹中的文本文件

标签 java text-files javafx-8 classloader relative-path

您好,感谢您花时间查看此问题。

我在访问与 src 文件夹平行的文件夹中的文本文件时遇到问题(结构见下文)。

我找到的最接近的解释是:https://www.cis.upenn.edu/~matuszek/cit597-2006/Pages/finding-files.html 我遇到过很多类似的问题,但不幸的是,我没有一个可以从中推断出这个问题的答案。

我知道我可以使用绝对路径,但我想确保该软件可以在其他人的计算机上运行,​​所以这是不行的。因此,我试图让它与相对路径一起工作。

作为奖励,这里建议:https://coderanch.com/t/464197/java/java/Reading-files-directory-giving-relative为了让这段代码在 JAR 文件中工作,我必须使用 getResourceAsStream()。有人可以建议一下吗?

我正在尝试从 RecipeReader.java 中访问 Recipes.txt,这是迄今为止我的代码:

        Class thisClass = this.getClass();
        ClassLoader loader = thisClass.getClassLoader();
        URL recipeFileURL = loader.getResource("Recipes.txt");
        String path = recipeFileURL.getPath();
        path.replaceAll("%20",  " ");
        BufferedReader input = new BufferedReader(new FileReader(path));

类似地写入同一个文件:

        Class thisClass = this.getClass();
        ClassLoader loader = thisClass.getClassLoader();
        URL recipeFileURL = loader.getResource("Recipes.txt");
        String path = recipeFileURL.getPath();
        path.replaceAll("%20",  " ");
        BufferedWriter output = new BufferedWriter(new FileWriter(path));

预先感谢您的帮助!

罗宾

Eclipse Tree View

最佳答案

如果这些文件捆绑在您的 jar 文件中,那么它们就不再是文件了:文件系统在运行时不包含这些文件,因为它们嵌入在 jar 文件中。因此您可能使用文件 IO 来读取它们。 new FileReader(path) 没有意义。

您似乎还想修改这些资源的内容。如果资源嵌入到jar文件中,那绝对不可能。

因此,您需要考虑您真正想要做什么,以及如何向最终用户提供应用程序并安装它。

如果文件包含应用程序所需的静态只读资源,则应将它们捆绑在 jar 文件中,并使用类加载器读取。

如果文件是数据,必须由应用程序读取和保存,就像文本编辑器所做的那样,那么向应用程序提供它们可能没有意义:只需询问用户在哪里加载/保存文件。

如果它们是需要由应用程序透明地加载和保存的首选项,那么您可以从位于用户主目录中的 .myApp.prefs 文件加载和保存它们。

关于java - 使用相对路径访问并行资源文件夹中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38805665/

相关文章:

java - 使用 Java 仅在文件的第一行将计数器附加到多个相同的列字

php - 将 txt 文件的每一行读取到新的数组元素

JavaFX 8 Z 缓冲区问题

如果所有者最小化,则 Javafx 对话框(警报)不可见

java - 重写equals方法时,我们只使用 'Object obj'作为参数吗?

java - 如何与 Java 中的 OData 交互?

delphi - 写入文本文件的中间

java - 刷新 TableView 中的一列组合框,javafx

java - 如何在android中获取图像裁剪器的坐标?

java - 如何使用 Floyd–Steinberg 抖动将 24 位 PNG 转换为 3 位 PNG?