java 通过 URL 类和 URLConnection类 以及输入流实现文件下载功能

 

package udp;
import java.net.* ;
import javax.swing.* ;
import java.awt.event.*;
import java.io.* ;
public class Download
{
  public static void main(String[]args)
  {
     JFrame jf=new JFrame("XiaoWei DownLoad Software") ;
     jf.addWindowListener(new   WindowAdapter()
                          {
                         public  void windowClosing(WindowEvent e)
                           {
                             System.exit(0);   //退出程序
                           }
                          });
      jf.setSize(600,400);
      jf.setLocation(200,300);
      JPanel p=new JPanel() ;   //面板默认是FlowLayout布局管理器
      final JTextField j=new  JTextField("Please Input DownLoad Address In This Area",40) ;
      JLabel l=new JLabel("请输入下载地址:") ;
      p.add(l);
      p.add(j);
      jf.getContentPane().add(p,"North");
      final   JTextArea t1=new JTextArea() ;
      jf.getContentPane().add(t1,"Center");
      JButton b=new JButton("DownLoad") ;
      jf.getContentPane().add(b,"South") ;
      b.addActionListener(new ActionListener()
                          {
                            public void actionPerformed(ActionEvent e)
                            {
                               String s=j.getText();  //如果要在内部类中使用局部变量的话 要把局部变量设置为final类型 最终类型
                               try
                               {
                                 String line=System.getProperty("line.separator") ;//获得与平台无关的换行
                                 URL url=new URL(s);
                                  URLConnection u=url.openConnection() ;   //打开连接 获得URLConnection类的对象
                                 t1.append("目标主机:" +url.getHost());
                                 t1.append(line);
                                 t1.append("主机缺省端口:"+url.getDefaultPort());
                                 t1.append(line);
                                 t1.append("目标类型:"+u.getContentType()) ;
                                 t1.append(line);
                                 t1.append("对象大小"+u.getContentLength());
                                 InputStream in=u.getInputStream() ;//打开 输入流
                                 InputStreamReader r=new InputStreamReader(in);  //字节流到字符流转换的桥梁
                                 BufferedReader br=new BufferedReader(r) ;  //连接到bufferreader提供读取一行数据的功能
                                 FileOutputStream fos=new FileOutputStream("D:\\1.html") ;  //假如我们下载网页文件
                                 String str ;   //用String的好处是  读取到多少个字符 就会开辟多少的空间

                                   while ((str=br.readLine())!=null) {
                                     fos.write(str.getBytes()); //因为读取一行文本会忽略换行回车 那么实际读取的文件会小 所以应该加上 我们应该使用与系统无关的回车换行
                                       fos.write(line.getBytes()); //最后写的文件比 实际文件大2个字节 是因为 我们在最后一次多写入了 回车 换行 2个字节
                                   }

                                 fos.close(); //关闭文件流
                                 br.close();
                                 r.close();
                                 in.close(); //使用完流要关闭
                               }
                               catch(Exception xe)
                               {
                                 xe.printStackTrace();
                               }

                            }
                          });
      jf.show();

 

  }

}

时间: 2024-09-27 13:54:26

java 通过 URL 类和 URLConnection类 以及输入流实现文件下载功能的相关文章

InetAddress类、URL类、URLConnection类解析及用法示例

http://blog.csdn.net/Touch_2011/article/details/6915043

URLconnection 类建立连接问题

问题描述 URLconnection 类建立连接问题 如服务器地址为 Http://172.16.16.16:8080文件地址为 C:myDocumentaaaa.ptf 使用URL url = new URL("""");连接上该文件括号内的地址怎么填 解决方案 要geturl方法实现 解决方案二: java中用URLConnection 类post方式提交表单URLConnection类 解决方案三: URL中必须有 http:// 或者 ftp:// 或者 f

写了一个Java读取XML文件的工具类

xml 如果我们有下面的一个XML文件,可以把它想象成一个Relation Database中的Table, 这个XML文件就是一个名字为managers的关系表,而一个<manager>所包含的就是一条记录(Record),而manager中的service和implementation就是一个个的栏位(Field) ! managers table  +  service implementation net.csdn.blog.xport.IDBConnectionManager net

Java编程那些事儿76——StringBuffer类和System类

9.5.3.2 StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类. 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等操作,使用StringBuffer要更加适合一些. 在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能

Java网络编程基础(三) Datagram类使用方法

Datagram(数据包)是一种尽力而为的传送数据的方式,它只是把数据的目的地记录在数据包中,然后就直接放在网络上,系统不保证数据是否能安全送到,或者什么时候可以送到,也就是说它并不保证传送质量. 1 UDP套接字 数据报(Datagram)是网络层数据单元在介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的.独立的.自身包含地址信息的消息,它能否到达目的地.到达的时间.到达时内容是否会变化不能准确地知道.它的通信双方是不需要建立连接的,对于一些不需要很高质量的应用程序来说,数据报通信是一

java 利用java反射机制动态加载类的简单实现_java

如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

数据库-java中的流属于工具类吗,还是属于一种数据类型?

问题描述 java中的流属于工具类吗,还是属于一种数据类型? 数据库存储的blob类型数据不应该是一串二进制数吗,为什么都说它是二进制流. 解决方案 工具类都在这个java.util中定义, 你看包就知道了 流是专门处理Io的. 有一套对应的类来支持它 数据库存储的blob类型数据不应该是一串二进制数吗,为什么都说它是二进制流 存储的数据是二进制数,但是这个二进制数的格式是某个对象的 这就是流对象. 你要通过流对象读出二进制数啊 这和你用流读取一个二进制文件是一样的 解决方案二: 流是一种抽象类

如何理解java中 对象.this方法 还有 类.this.方法的 意义

问题描述 如何理解java中 对象.this方法 还有 类.this.方法的 意义 如何理解java中 对象.this方法 还有 类.this.方法的 意义 有没有这两种语法规则呢 解决方案 this.方法是在某个对象的实例方法内,this代表当前实例.一般情况下不用写,除非它和参数重名才需要: class A { int a; int b; public void seta(int a) { this.a = a; //因为参数a和成员变量a都叫a,所以需要区分. b = a; //相当于th

java当中的泛型类问题,类泛型参数是类的问题

问题描述 java当中的泛型类问题,类泛型参数是类的问题 类1<类2> 这样子写的话 类1和类2的选取范围是什么类<类>类的泛型是类的本身,这种写有错吗 解决方案 一般来讲,我们用到"类1<类2>"这样的形式的Java语句,通常是希望将范围比较大的类1里面所包含的内容规范化成类2:举个简单的例子,我们通常会在创建集合的时候限定集合里面的内容的类型,如:List.这意味着这个List集合里的内容都是字符串类型,而不会是Long或其他,这样就会在我们操作