Java类阅读Jar内部的Yaml

时间:2013-08-15 18:29:26

标签: java jar yaml

我正在尝试从jar中的另一个类读取jar中的文件。但是我不断得到同样的错误:Caught:尝试读取指标时类java.io.FileNotFoundException: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);

我也这样做,假设它可能从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);

然后我注意到这个帖子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中的位置: 该类位于以下路径中:com / a / b / c / myclass.class yaml位于以下路径中:myYaml.yml

3 个答案:

答案 0 :(得分:2)

Jar中的文件不再是文件,使用此

更改inputStream创建
InputStream in = YourClass.class.getResourceAsStream("myYaml.yml");

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

答案 1 :(得分:0)

InputStream is = this.getClass().getClassLoader().getResourceAsStream("file");

答案 2 :(得分:0)

以某种方式,我必须在文件名前添加“ /”。

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

来自Java文档:

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

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

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

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