我正在创建用于查看PDF文件的桌面JavaFX应用程序。 PDF位于资源文件夹中。我将resourse文件作为流读取,然后创建临时文件并使用它将内容转换为图像并显示到ImageView中。
Issue detail:
{quote}
[Description of issue]
{quote}
Check it on Sonar: [value set in sonar.core.serverBaseURL]/issue/show/[issue ID]
问题是:当我使用
创建常规文件时 currentPdf = new File("current.pdf");
if (!currentPdf.exists()) {
// In JAR
InputStream inputStream = ClassLoader.getSystemClassLoader()
.getResourceAsStream("PDFSample.pdf");
// Copy file
OutputStream outputStream;
try {
outputStream = new FileOutputStream(currentPdf);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
byte[] buffer = new byte[1024];
int length;
try {
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.close();
inputStream.close();
} catch(IOException e) {
throw new RuntimeException(e);
}
}
一切都按预期工作(我在currentPdf = new File("current.pdf");
所在的目录中创建了current.pdf
。但是我希望在系统临时文件夹中创建文件,并在退出应用程序时删除该文件。我试过这个:
jar
获得例外:
try {
currentPdf = File.createTempFile("current",".pdf");
} catch (IOException e) {
throw new RuntimeException(e);
}
currentPdf.deleteOnExit();//also tried to comment this line
用这种方法:
Caused by: java.io.IOException: Error: End-of-File, expected line
at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1517)
at org.apache.pdfbox.pdfparser.PDFParser.parseHeader(PDFParser.java:360)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:186)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1227)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1194)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1165)
at ua.com.ethereal.pdfquiz.Controller.getPdfPageAsImage(Controller.java:147)
非常感谢帮助解决这个问题,或者指导我直接从jar中读取文件以避免创建临时副本。
答案 0 :(得分:3)
如何创建临时文件?
通常的方法是在文件系统中创建一个空文件。这将使你的逻辑绊倒:
if (!currentPdf.exists()) {
该检查应该是为了避免覆盖现有文件,但在这种情况下你必须摆脱它。实际上,您跳过PDF生成代码并尝试读取空文件。