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