正在Servlet程序中读取文件



我正在努力了解在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代码中读取文件的有效方法是什么吗?当我们需要更喜欢使用CCD_ 2而不是以字节为单位读取数据时。

自从Java7的NIO以来,几乎没有理由再手动读取文件了。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新