"Java实现的简单单线程文件下载工具" 在Java编程中,创建一个基本的文件下载器是常见的任务之一。这个程序利用了Java的网络和I/O功能来实现一个简单的单线程文件下载器。以下是该程序涉及的关键知识点: 1. **URL和HttpURLConnection**: - `java.net.URL` 类用于表示统一资源定位符,它是互联网上资源的地址。在这个程序中,`URL` 用于创建与文件下载地址的连接。 - `HttpURLConnection` 是`URLConnection` 的子类,提供了HTTP协议的相关功能。通过调用`openConnection()` 方法,我们可以与指定URL建立连接,并进行HTTP请求。 2. **HTTP请求头设置**: - 在下载文件之前,我们设置了请求头的“Range”属性,将其值设为“bytes=0-”。这表明我们要下载文件的全部内容,从第一个字节开始到文件结束。 3. **响应码检查**: - `getResponseCode()` 方法用于获取服务器返回的HTTP响应状态码,通常200表示成功。在此程序中,我们打印出响应码,但没有进一步处理。 4. **输入/输出流**: - 使用`InputStreamReader` 和 `BufferedReader` 从控制台读取用户输入的文件路径、下载路径和文件名。 - `HttpURLConnection` 的 `getInputStream()` 方法返回一个`InputStream` 对象,用于读取服务器响应的数据(即文件内容)。 - `RandomAccessFile` 是Java中用于随机访问文件的强大工具,它可以像操作数组一样操作文件。在这里,我们使用它来写入从服务器接收到的数据到本地文件。 5. **数据传输**: - 定义一个字节数组 `bytes` 来缓冲从网络读取的数据,然后使用`read()` 方法从输入流中读取数据。 - 当 `read()` 返回 `-1` 时,表示已到达文件末尾,因此在循环中检查这个条件,以避免无限循环。 - 使用 `write()` 方法将读取到的字节写入`RandomAccessFile`,完成文件内容的写入。 6. **文件名处理**: - 通过`getPath()` 获取URL中的路径部分,然后使用 `lastIndexOf(".")` 找到最后一个点号,以获取文件扩展名。 - 将扩展名与用户输入的下载路径和文件名拼接,创建完整的本地文件名。 这个程序虽然简单,但它展示了如何使用Java进行网络请求,处理HTTP响应,并将数据保存到本地文件的基本步骤。在实际应用中,可能需要添加错误处理、多线程支持、进度显示、断点续传等功能,以提高下载器的实用性和效率。
import java.io.*;
public class DownloadUtil {
public static void main(String[] args) throws IOException {
System.out.println("请输入要下载的文件路径:");
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String srcPath=br.readLine();
URL url=new URL(srcPath);
System.out.println("请输入文件保存路径:");
String destPath=br.readLine();
System.out.println("请输入文件名:");
String fileName=br.readLine();
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestProperty("Range", "bytes=0-");
int code=conn.getResponseCode();
System.out.println(code);
InputStream fis=conn.getInputStream();
byte[] bytes=new byte[1024];
String temp= url.getPath();
int t=temp.lastIndexOf(".");
temp=temp.substring(t);
RandomAccessFile dest = new RandomAccessFile(destPath+fileName+temp,"rw");
int len=0;
System.out.println("下载中.......");
while((len=fis.read(bytes))!=-1){
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦