Javaservlet中Pdf文件的BufferedReader
我的BufferedReader会破坏我的Pdf文件,并将所有内容写入第一行Javaservlet中Pdf文件的BufferedReader,java,pdf,servlets,Java,Pdf,Servlets,我的BufferedReader会破坏我的Pdf文件,并将所有内容写入第一行 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { createPdf(); response.setHeader("Content-disposition","attachment; filename=\""+"myP
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
createPdf();
response.setHeader("Content-disposition","attachment; filename=\""+"myPdf.pdf"+"\"");
BufferedReader reader = null;
try {
File file = new File("myPath\\myNewPdf.pdf");
reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
response.getWriter().append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我只想读一下Pdf,然后把它写进一个新的Pdf,这样就可以下载了。这就成功了thx@user207421
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
createPdf();
response.setHeader("Content-disposition","attachment; filename=\""+"myNewPdf.pdf"+"\"");
InputStream inputStream = new FileInputStream("myPath\\myPdf.pdf");
int data;
while( (data = inputStream.read()) >= 0 ) {
response.getWriter().write(data);
}
inputStream.close();
}
BufferedReader
不用于读取非文本文件,请使用较低级别的类(例如FileInputStream
),请参阅:BufferedReader
是Reader
,而Reader
用于字符数据。PDF文件不是字符数据,也不包含行。您应该使用输入流
。正如JavaDoc中定义的那样,Reader
抽象类是一个用于读取字符流的抽象类,但是PDF文件是一个二进制文件,而不是字符流。使用InputStream
读取文件,使用response.getOutputStream()
写入文件以后可能会导致问题-响应。getWriter()
返回PrintWriter
,它同样用于输出字符数据,但您正在写入二进制数据。对于当前文件,它可能可以工作,但我建议使用response.getOutputStream()
进行输出。