1. 程式人生 > >【java學習記錄】13.實現簡單的瀏覽器功能:獲取原始碼、儲存原始碼、獲取圖片

【java學習記錄】13.實現簡單的瀏覽器功能:獲取原始碼、儲存原始碼、獲取圖片

仿照IE瀏覽器,設計一簡單的網站訪問程式,實現如下功能:
(1)具有類似IE的簡單介面,使用者能輸入URL地址,獲得輸入URL的HTML原始碼;
(2)將獲得的HTML原始碼儲存到指定檔案中。D:\index.html
(3)從獲得的HTML原始碼中,選擇一個圖片(.jpg,.gif,.png)連結,從WWW伺服器獲取該檔案並下載儲存。D:\pic8.jpg

Browser

public class Browser extends JFrame implements ActionListener{

    JButton btnGetSource;//獲取原始碼
    JButton btnSaveSource;//儲存原始碼
JButton btnGetImage;//獲取圖片 JTextField urlText;//網址文字框 JTextArea sourceText;//原始碼文字域 Browser(){ //框架 this.setTitle("瀏覽器"); this.setSize(800, 500); this.setLocationRelativeTo(null);//居中 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//結束程式 this.setLayout(new
BorderLayout());//使用邊框佈局 //面板 JPanel northPanel=new JPanel();//北區面板 JPanel centerPanel=new JPanel();//中區面板 JPanel btnPanel=new JPanel();//存放按鈕的面板 northPanel.setBackground(Color.white);//設定背景顏色 centerPanel.setBackground(Color.cyan); btnPanel.setBackground(Color.white); northPanel.setPreferredSize(new
Dimension(0, 38));//設定北區面板的高度為45,寬度隨視窗變化 northPanel.setLayout(new BorderLayout());//使用邊框佈局 centerPanel.setLayout(new BorderLayout());//使用邊框佈局 this.add(northPanel,BorderLayout.NORTH);//新增到框架的北區 this.add(centerPanel,BorderLayout.CENTER);//新增到框架的中區 northPanel.add(btnPanel,BorderLayout.EAST);//將btnPanel面板新增到northPanel面板的東區 //URL標籤 JLabel urlLabel=new JLabel("URL:"); urlLabel.setBorder(new EmptyBorder(0, 5, 0, 0)); urlLabel.setPreferredSize(new Dimension(40,0)); northPanel.add(urlLabel,BorderLayout.WEST); //網址文字框 urlText=new JTextField("http://www.swust.edu.cn"); urlText.setBorder(new CompoundBorder(new EmptyBorder(5,0,5,0), new LineBorder(Color.gray)));//設定文字框的位置和顯示文字框的邊框 northPanel.add(urlText,BorderLayout.CENTER); //按鈕 btnGetSource=new JButton("獲取原始碼"); btnSaveSource=new JButton("儲存原始碼"); btnGetImage=new JButton("獲取圖片"); btnPanel.add(btnGetSource);//將按鈕新增到btnPanel面板上 btnPanel.add(btnSaveSource); btnPanel.add(btnGetImage); //新增監聽器 btnGetSource.addActionListener(this); btnSaveSource.addActionListener(this); btnGetImage.addActionListener(this); //原始碼文字域 sourceText=new JTextArea(); JScrollPane scrollPane=new JScrollPane(sourceText);//給文字域新增滾動條 scrollPane.setBorder(new CompoundBorder(new EmptyBorder(0,5,15,5), new LineBorder(Color.gray)));//設定文字框的位置和顯示文字域的邊框 centerPanel.add(scrollPane); //顯示框架 this.setVisible(true); } //點選事件 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==btnGetSource){ getSource();//獲取原始碼 }else if(e.getSource()==btnSaveSource){ saveSource();//儲存原始碼 }else{ getImage();//獲取圖片 } } //獲取原始碼 public void getSource(){ // System.out.println("111"); sourceText.setText("");//清空原始碼文字域內容 try { URL url=new URL(urlText.getText());//獲取網址 InputStream is=url.openStream();//開啟網址 InputStreamReader isr=new InputStreamReader(is,"utf-8");//讀取網址內容,UTF-8:編碼方式 BufferedReader br=new BufferedReader(isr);//設定緩衝 String read;//儲存讀取的內容 while((read=br.readLine())!=null){//一行一行的讀取內容 sourceText.append(read+"\n");//新增到原始碼文字域中 } //關閉流 br.close(); isr.close(); is.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //儲存原始碼 public void saveSource(){ // System.out.println("222"); File source=new File("D:\\index.html");//建立txt文字 try { FileWriter fw=new FileWriter(source);//字元輸出流 String read=sourceText.getText();//獲取原始碼文字域內容 fw.write(read); //彈出提示框 JOptionPane.showMessageDialog(this, "原始碼儲存成功!"); fw.close();//關閉流 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //獲取圖片 public void getImage(){ // System.out.println("333"); try { URL url=new URL("http://www.swust.edu.cn/page/main851/images/flash1.jpg");//圖片地址 InputStream is=url.openStream();//開啟網址 File image=new File("D:\\pic8.jpg");//建立檔案 FileOutputStream fos=new FileOutputStream(image);//輸出流 byte[] b=new byte[2048];//需為2的倍數 int n=is.read(b);//讀取位元組的個數,每次讀2048個位元組 while(n!=-1){//-1表示讀完 // fos.write(b1);//寫入所有位元組流 fos.write(b,0,n);//第0個位元組開始,寫入n個位元組 n=is.read(b); } //彈出提示框 JOptionPane.showMessageDialog(this, "圖片獲取成功!"); //關閉流 is.close(); fos.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { new Browser(); } }

獲取原始碼

儲存原始碼

獲取圖片