天天看點

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("目标類型:"+u.getContentType()) ;

                                 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();

  }

}