我试图了解在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
而不是以字节读取数据时。
答案 0 :(得分:2)
自Java 7的NIO以来,几乎没有理由再手动阅读文件。
只需使用Files.readAllBytes(Path)
即可阅读完整的byte[]
。或者,如果您想直接流式传输到OutputStream
,Files.copy(Path, OutputStream)
。
有人可以告诉我哪种阅读方式有效 servlet代码中的文件?当我们需要更喜欢使用BufferedReader时 比较以字节为单位读取数据。
任何缓冲的方法都可以。在这里,BufferedReader
允许您将流读取为String
值。正如javadoc所说
从字符输入流中读取文本,缓冲字符 提供有效的字符,数组和行读取。