一、获取文件路径
要下载文件,首先需要获取文件的路径信息。路径可以是本地文件系统的路径或远程服务器的路径。下面是使用本地文件系统路径的示例代码:
String filePath = "C:\\example\\file.txt";
对于远程服务器路径,可以使用Java中的URL类来解析:
URL url = new URL("http://www.example.com/file.txt");
二、创建HTTP连接
创建HTTP连接来连接服务器或其他服务,可以使用Java中的HttpURLConnection类。
URL url = new URL("http://www.example.com/file.txt");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
三、设置连接属性
在向服务器发送请求之前,需要设置连接属性。
设置请求方法:
httpConn.setRequestMethod("GET");
设置请求超时时间:
httpConn.setConnectTimeout(5000);
设置响应文件类型:
httpConn.setDoOutput(true);
httpConn.setRequestProperty("Content-Type", "application/octet-stream");
httpConn.setRequestProperty("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
四、建立数据流传输通道
将数据从InputStream读取到OutputStream,可以使用Java中的BufferedInputStream和BufferedOutputStream。
BufferedInputStream in = new BufferedInputStream(httpConn.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
五、下载文件并写入数据流
从输入流读取数据并将其写入输出流。
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.flush();
out.close();
httpConn.disconnect();
六、完整示例代码
@RequestMapping(value = "/downloadFile", method = RequestMethod.GET)
public void downloadFile(HttpServletResponse response) {
try {
String fileName = "file.txt";
String filePath = "C:\\example\\file.txt";
File file = new File(filePath);
response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
七、小结
在Java中下载文件到浏览器可以通过以上几个步骤完成。首先获取文件路径,然后创建HTTP连接,设置连接属性,建立数据流通道,最后将数据从输入流读取到输出流并写入,即完成了文件下载的过程。