我正在努力了解在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[]
。或者,如果要直接流式传输到OutputStream
、Files.copy(Path, OutputStream)
。
有人能告诉我哪种阅读方式有效吗servlet代码中的文件?当我们需要在中更喜欢使用BufferedReader时与以字节为单位读取数据相比。
任何缓冲方法都可以。在这里,BufferedReader
允许您将流读取为String
值。正如javadoc所说的
从字符输入流中读取文本,缓冲字符以便以提供对字符、数组和行的有效读取。