获取 "java.io.IOException: Stream closed",尝试从相对路径读取文件时

Getting "java.io.IOException: Stream closed", when trying to read file from relative path

我正在尝试读取 yaml 文件。起初我有绝对路径,它工作正常。现在当我要在服务器中部署 war 文件时,我想将绝对路径更改为相对路径。从那时起它就给出了错误。 代码:

    Yaml yaml = new Yaml();
    InputStream inputStream = getClass().getResourceAsStream("src/main/resources/config/jobnames.yml");
    HashMap yamlMap = yaml.load(inputStream);

异常堆栈:

org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:218)
org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
org.yaml.snakeyaml.Yaml.load(Yaml.java:453)

请帮我看看这是什么问题?谢谢

ClassLoader.getResourceAsStream() 从类路径加载资源,如下所述:https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html#getResource-java.lang.String-

因此您必须省略“src/main/resources”,因为这恰好是您的项目设置路径。 “/config/jobnames.yml”应该有效。

由于您使用的是 ClassLoader,因此路径应该是相对的而不是绝对的,因为 resources 在类路径上直接可用(您的代码中也缺少获取 ClassLoader)

你能试试这个而不是使用绝对路径吗-

Yaml yaml = new Yaml();
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config/jobnames.yml");
HashMap yamlMap = yaml.load(inputStream);

这应该可以解决问题![​​=13=]