如何解决尝试从相对路径读取文件时,获取“ java.io.IOException:流已关闭”
我正在尝试读取yaml文件。起初我有绝对的道路,它运转良好。现在,当我将战争文件部署在服务器中时,我想将绝对路径更改为相对路径。从那时起,它给出了错误。 代码:
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);
那应该可以解决问题!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。