Java类读取Jar中的Yaml

Java类读取Jar中的Yaml,java,jar,yaml,Java,Jar,Yaml,我试图从jar中的另一个类读取jar中的文件。但是,在尝试读取metrics:metrics.yml时,我不断收到相同的错误:catch:class java.io.FileNotFoundException 起初,我让我的代码执行类似的操作,假设它来自类的路径: String yamlPath = ".." + File.separator + ".." + File.separator + ".." + File.separator + ".." + File.separator + "my

我试图从jar中的另一个类读取jar中的文件。但是,在尝试读取metrics:metrics.yml时,我不断收到相同的错误:catch:class java.io.FileNotFoundException

起初,我让我的代码执行类似的操作,假设它来自类的路径:

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);
我还假设它可能从jar的底部获取路径:

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);
然后我注意到这条线,并发现我需要一个“/”在我的路径。我也用斜杠尝试了上述两种方法

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

OR

String yamlPath = File.seperator + "myYaml.yml";
我现在完全不知道该怎么处理这个错误了。关于jar结构,我有什么不明白的吗?为什么找不到我的文件。提前感谢您提供的任何帮助/信息

对不起,我忘了提到它在罐子里的位置: 该类位于以下路径中:com/a/b/c/myclass.class
yaml位于以下路径中:myYaml.yml

Jar中的文件不再是文件,请使用以下命令更改inputStream创建

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

假设您的
.yml
文件位于jar的根目录下,我必须在文件名前面添加“/”

InputStream is = this.getClass().getClassLoader().getResourceAsStream("file");
InputStream resourceAsStream = Xx.class.getResourceAsStream("/test.yml");
来自java文档:

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

如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。 否则,绝对名称的形式如下: 修改的\u包\u名称/名称 其中,修改后的_package_name是此对象的包名,用“/”替换“.”(“\u002e”)

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

InputStream in = Xx.class.getClassLoader().getResourceAsStream("test.yml");

它不再是Jar中的文件,它在Jar中的确切位置是什么?@JigarJoshi对此表示抱歉。问题现在更新了,非常感谢。这确实有效。由于某种原因,我没有在另一个线程中注意到它。