我正在尝试从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
答案 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_package_name /名称 其中Modifyed_package_name是此对象的软件包名称,用“ /”代替“。”。 ('\ u002e')。
在检查了更多详细信息之后,我的解决方案与
相同InputStream in = Xx.class.getClassLoader().getResourceAsStream("test.yml");