import java.net.*;
import java.io.*;
public class Test //这里定义一个类,类名一定要和我们的文件名一样
{
public static void main(String args[])
//主函数是java程序的入口
{
try
{
byte b[]=new byte[1024];
URL url=null;
System.out.println("请输入一个完整的URL?");
int i=System.in.read(b);
String temp=new String(b);//将用户输入的信息转换成字符串
temp=temp.trim();//去掉字符串中的前后空格
while(!temp.equals(""))
{
url=new URL(temp);//用这个字符串来创建一个URL对象
new down(url);//将这个URL资源的下载丢给一个临时的线程来处理!
System.out.println("请输入一个完整的URL?");
i=System.in.read(b);
temp=new String(b);//将用户输入的信息转换成字符串
temp=temp.trim();//去掉字符串中的前后空格
}
System.out.println("谢谢使用!再见!");
}catch(Exception e){}
}
}
class down extends Thread
{
URL u;
InputStream is;
FileOutputStream out;
String temp;
byte b[]=new byte[1024];
down(URL u)
{
try
{
this.u=u;
temp=u.getFile();//得到这个URL所指向的文件的完整路径
int i=temp.lastIndexOf("/");//得到这个路径中最后一个路径分割符"\"的位置
temp=temp.substring((i+1),temp.length());
//将这个位置后面的子串取出,因为它就是完整的文件名
System.out.println("URL资源"+temp+"定位成功!正在打开输入流……");
is=u.openStream();//打开程序与这个URL资源的输入流
out=new FileOutputStream(temp);//在本地也去创建一个一模一样的文件
System.out.println(temp+"输入流创建成功!");
this.start();
}catch(Exception e){}
}
public void run()
{
try
{
int i=is.read(b);//开始读入数据
System.out.println("正在下载"+temp+",请稍候……");
while(i!=-1)//如果数据不为null 就反复的写入到本地文件中,并且再次读入
{
out.write(b,0,i);
out.flush();
i=is.read(b);
}
is.close();
out.close();//关闭所有的流
System.out.println("下载"+temp+"完毕,请验收!");
System.out.println("文件被保存为:"+temp);
//提示用户,下载完毕后的本地文件叫什么名字
}catch(Exception e){}
}
}