当前位置: 首页 > 面试题库 >

Java类读取Yaml内罐

阚通
2023-03-14
问题内容

我试图从罐子内的另一个类读取罐子内的文件。但是,我不断收到相同的错误:尝试读取度量标准时,捕获了类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);

我还假设它可能会从罐子的底部开始移动,所以我也这样做了:

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

然后我注意到了这个线程。如何从Java的jar中读取文件?并发现我需要在路径前加一个“ /”。我也使用斜杠尝试了以上两种方法。

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中的文件不再是文件,用此更改inputStream创建

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

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



 类似资料:
  • 问题内容: 我在使用spring通过java阅读yaml时遇到问题。让我先显示代码 我的yaml文件: Spring上下文xml也具有以下内容: 现在,我的期望是,在我的春季测试应用程序运行期间(上下文xml来自我的测试资源,yaml也处于我的测试中),这些orders和requests值已设置,但它们为空。另外,请注意,除了使用@Value($ {…})注入的值之外,yaml中还有其他值,注入它

  • 我在使用Spring通过java读取yaml时遇到了一个问题。让我先展示代码 我的yaml文件: spring上下文xml还具有以下功能: 在这里面,它说,所有的东西都是作为一个字符串而不是一个地图来阅读的。是否有其他类支持读取Yaml文件的方式:Spring boot-inject map from application.yml 还是我对YamlPropertiesFactoryBean的理解

  • 我有以下问题。我根据一个给定的概要文件在yaml文件中读取的值创建一个数据源。 我当前的问题是,当我用“dev”配置文件启动应用程序时,serviceId的值是'my-prod-service'。 我在这里做错了什么?

  • 我想在/文件中定义特定于环境的属性。因此,我创建了以下: 接下来,我编写了这个: 如https://github.com/intuit/Karate#reading-files所示,函数应该由Karate知道,但是我不确定这是只适用于文件还是也适用于。 不幸的是,上面的都不起作用,因为我得到了这个错误: 我确信该文件存在并且是可读的。 是我做错了什么,还是我的方法不被支持?如果它不受支持,推荐的方

  • 我得到的JSON数据如下所示 {"setsionID":7242750700467747000} 这个数字以前从服务器响应中获得,并在服务器端生成为JavaLong。客户端标识自己认为这个并将其与请求一起发送。问题是当客户端的请求到达服务器时,我必须再次解析这个值以键入Long。我使用JsonPath,具体来说: 当我像这样解析JSON数据时 Long sessionID=JsonPath。读(j

  • 我在Mule中定义了以下YAML属性文件。 YAML属性文件 我知道要获得名称,我应该使用“#[p('table.customers.name')]。 我想知道的是,有没有任何方法可以通过传递.name来获取密钥,比如table。键或表。$。我的意思是,如果我通过customerID,我应该得到关键的“客户”。类似地,如果我传递orderDateMin,orderDate Max,它应该返回“or