1

我正在尝试从 jar 中的另一个类读取我的 jar 中的文件。但是我不断收到同样的错误: Caught: class java.io.FileNotFoundException while trying to read metrics: metrics.yml

起初我让我的代码做这样的事情,假设它来自类的路径:

String yamlPath = ".." + File.separator + ".." + File.separator + ".." + File.separator + ".." + File.separator + "myYaml.yml";

InputStream in = new FileInputStream(new File(yamlPath));
InputStreamReader isr = new InputStreamReader(in);
BufferedReader input = new BufferedReader(isr);
yamlObj = (HashMap) javaYAML.load(input);

我也这样做了,假设它可能会从罐子底部走路径:

String yamlPath = "myYaml.yml";

InputStream in = new FileInputStream(new File(yamlPath));
InputStreamReader isr = new InputStreamReader(in);
BufferedReader input = new BufferedReader(isr);
yamlObj = (HashMap) javaYAML.load(input);

然后我注意到这个线程How to read a file from jar in Java? 并发现我的路径之前需要一个“/”。我也使用斜线尝试了上述两种方法。

String yamlPath = File.seperator + ".." + File.separator + ".." + File.separator + ".." + File.separator + ".." + File.separator + "myYaml.yml";

OR

String yamlPath = File.seperator + "myYaml.yml";

我现在完全不知道如何处理这个错误。关于 jar 结构有什么我没有得到的吗?为什么找不到我的文件。提前感谢您的任何帮助/信息。

抱歉,我忘了提到它在 JAR 中的位置:该类位于以下路径中:com/a/b/c/myclass.class yaml 位于以下路径中:myYaml.yml

4

3 回答 3

2

Jar 中的文件不再是文件,使用此更改 inputStream 创建

InputStream in = YourClass.class.getResourceAsStream("myYaml.yml");

假设您的.yml文件位于 jar 的根目录

于 2013-08-15T18:33:06.887 回答
0
InputStream is = this.getClass().getClassLoader().getResourceAsStream("file");
于 2013-08-15T18:34:39.277 回答
0

不知何故,我必须在文件名前添加“/”。

InputStream resourceAsStream = Xx.class.getResourceAsStream("/test.yml");

来自java文档:

在委托之前,使用以下算法从给定的资源名称构造一个绝对资源名称:

如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。否则,绝对名称的格式如下: modified_pa​​ckage_name/name 其中 modified_pa​​ckage_name 是此对象的包名称,用 '/' 代替 '.' ('\u002e')。

在我检查了更详细的信息后,我的解决方案与

InputStream in = Xx.class.getClassLoader().getResourceAsStream("test.yml");
于 2020-05-05T08:01:12.357 回答