【发布时间】:2020-01-16 13:55:22
【问题描述】:
我正在尝试从磁盘读取文件,但是我遇到了编译错误 上
catch (Docx4JException | IOException e) {
e.printStackTrace();
log.error("Błąd Docx4J: ", e);
throw e;
}
未处理的异常类型文件notfoundexception有什么想法吗?
Stream<Path> files = Files.list(Paths.get(genConfig.getDocxJiraReportDirectory()));
files.forEach(file -> {
final WordprocessingMLPackage wordMLPackage;
try {
wordMLPackage = fileGenerator.loadFile(genConfig.getDocxTemplateDirectory(),
params.getTemplateFileName());
FileInputStream fis = new FileInputStream(file.toString());
String data = IOUtils.toString(fis, "UTF-8");
System.out.println(data);
String dataFinal = XmlHelper.GenerateEanImage(data);
Docx4J.bind(wordMLPackage, dataFinal, Docx4J.FLAG_NONE);
String filePath = genConfig.getDocxReportDirectory() + "/" + file.getFileName();
Docx4J.save(wordMLPackage, new File(filePath), Docx4J.FLAG_NONE);
} catch (Docx4JException | IOException e) {
e.printStackTrace();
log.error("Błąd Docx4J: ", e);
throw e;
}
});
【问题讨论】:
-
正在详细说明问题。您有一个未处理(未捕获)的 FileNotFoundException。将 FileNotFoundException 添加到您的 catch 块中。
-
但是 FileNotFoundException 是 IOException 的子类
-
可能是因为您获取文件流的第一行不在您的 try/catch 中
-
其他错误很简单,你的 catch en rethrox 异常不是运行时异常:“throw e;”应替换为“throw new RuntimeException(e);”这将解决您的编译问题:消费者(由 foreach 使用)不能抛出非运行时异常
标签: java file-io java-io fileinputstream