Javaservlet中Pdf文件的BufferedReader

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

我的BufferedReader会破坏我的Pdf文件,并将所有内容写入第一行

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()
进行输出。