在Servlet程序中读取文件

时间:2014-04-09 06:13:09

标签: java file servlets

我试图了解在Java Servlet程序中读取文件的正确方法是什么。我需要使用我的servlet代码从我的机器上的固定路径读取文件。现在我可以通过多种方式读取文件,我计划使用的方法之一是以字节读取信息,如下面的代码所示:

private static void readFile(HttpServletRequest req, HttpServletResponse resp, String path)
    throws IOException
  {
    File file = new File("C:\\temp\", path);

    if (!file.isFile()) {
      resp.sendError(404, "File not found: " + file);
      return;
    }
    InputStream in = null;
    ServletOutputStream out = null;
    try {
      resp.setContentLength(Long.valueOf(file.length()).intValue());
      resp.resetBuffer();
      out = resp.getOutputStream();
      in = new BufferedInputStream(new FileInputStream(file));
      readFile(in, out);
    }
    finally {
     //Code for closing the input & output steams
      }
    }
  }

 public static void readFile(InputStream in, OutputStream out) throws IOException
  {
    byte[] buf = new byte[4096];
    int data;
    while ((data = in.read(buf, 0, buf.length)) != -1)
      out.write(buf, 0, data);
  }

我对此逻辑没有任何问题,而且工作正常。

现在我在mykyong网站上发现了帖子How To Read File In Java – BufferedReader,此处示例使用了BufferedReader

有人可以告诉我在servlet代码中读取文件的有效方法是什么?当我们需要使用BufferedReader而不是以字节读取数据时。

1 个答案:

答案 0 :(得分:2)

自Java 7的NIO以来,几乎没有理由再手动阅读文件。

只需使用Files.readAllBytes(Path)即可阅读完整的byte[]。或者,如果您想直接流式传输到OutputStreamFiles.copy(Path, OutputStream)

  

有人可以告诉我哪种阅读方式有效   servlet代码中的文件?当我们需要更喜欢使用BufferedReader时   比较以字节为单位读取数据。

任何缓冲的方法都可以。在这里,BufferedReader允许您将流读取为String值。正如javadoc所说

  

从字符输入流中读取文本,缓冲字符   提供有效的字符,数组和行读取。