您好,感谢您花时间查看此问题。
我在访问与 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));
预先感谢您的帮助!
罗宾
最佳答案
如果这些文件捆绑在您的 jar 文件中,那么它们就不再是文件了:文件系统在运行时不包含这些文件,因为它们嵌入在 jar 文件中。因此您可能不使用文件 IO 来读取它们。 new FileReader(path)
没有意义。
您似乎还想修改这些资源的内容。如果资源嵌入到jar文件中,那绝对不可能。
因此,您需要考虑您真正想要做什么,以及如何向最终用户提供应用程序并安装它。
如果文件包含应用程序所需的静态只读资源,则应将它们捆绑在 jar 文件中,并使用类加载器读取。
如果文件是数据,必须由应用程序读取和保存,就像文本编辑器所做的那样,那么向应用程序提供它们可能没有意义:只需询问用户在哪里加载/保存文件。
如果它们是需要由应用程序透明地加载和保存的首选项,那么您可以从位于用户主目录中的 .myApp.prefs 文件加载和保存它们。
关于java - 使用相对路径访问并行资源文件夹中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38805665/