【问题标题】:Java Class Read a Yaml Inside JarJava 类在 Jar 中读取 Yaml
【发布时间】:2013-08-18 00:42:58
【问题描述】:

我正在尝试从 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

【问题讨论】:

  • 它不再是 Jar 中的文件,它到底在 jar 中的什么位置?
  • @JigarJoshi 对此感到抱歉。问题现已更新。

标签: java jar yaml


【解决方案1】:

Jar 中的文件不再是文件,用这个改变 inputStream 的创建

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

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

【讨论】:

  • 非常感谢。这确实有效。由于某种原因,我没有在其他线程中注意到它。
【解决方案2】:
InputStream is = this.getClass().getClassLoader().getResourceAsStream("file");

【讨论】:

    【解决方案3】:

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

    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");
    

    【讨论】:

      猜你喜欢
      • 2018-01-18
      • 2020-11-09
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多