Java实现文件下载功能
在Java中,我们可以使用java.net包中的URL和HttpURLConnection类来实现文件的下载,以下是一个简单的示例:
import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class FileDownload { public static void main(String[] args) { String fileURL = "http://example.com/file.zip"; // 文件URL String saveDir = "/Users/username/Downloads"; // 保存目录 try { downloadFile(fileURL, saveDir); } catch (IOException ex) { ex.printStackTrace(); } } public static void downloadFile(String fileURL, String saveDir) throws IOException { URL url = new URL(fileURL); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); int responseCode = httpConn.getResponseCode(); // 确保HTTP响应代码为200(HTTP_OK) if (responseCode == HttpURLConnection.HTTP_OK) { String fileName = ""; String disposition = httpConn.getHeaderField("Content-Disposition"); String contentType = httpConn.getContentType(); int contentLength = httpConn.getContentLength(); if (disposition != null) { // 如果Content-Disposition头字段存在,从其中获取文件名 int index = disposition.indexOf("filename="); if (index > 0) { fileName = disposition.substring(index + 10, disposition.length() - 1); } } else { // 如果Content-Disposition头字段不存在,从URL中获取文件名 fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1, fileURL.length()); } // 打开输入流并读取数据 InputStream inputStream = httpConn.getInputStream(); String saveFilePath = saveDir + File.separator + fileName; // 打开输出流并将数据写入文件 OutputStream outputStream = new FileOutputStream(saveFilePath); int bytesRead = -1; byte[] buffer = new byte[4096]; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.close(); inputStream.close(); System.out.println("File downloaded"); } else { System.out.println("No file to download. Server replied HTTP code: " + responseCode); } httpConn.disconnect(); } }
这个程序首先创建一个URL对象,然后使用这个URL对象打开一个HttpURLConnection,它检查HTTP响应代码是否为200(HTTP_OK),如果是,它将从HTTP响应头中获取文件名,并从输入流中读取数据,然后将数据写入到输出流中,最后关闭输入流和输出流,如果HTTP响应代码不是200,它将打印一条错误消息。
还没有评论,来说两句吧...