* URL(Uniform Resource Locator ),通用資源定位符。 http://www.mybole.com.cn/index.asp 就是一個URL。
*
URI(Uniform Resource Identifier),通用資源標識符。
*
URI純粹是個符號結構,用于指定構成Web資源的字符串的各個不同部分。URL是一種特殊類型的URI,它包含了用于查找某個資源的足夠信息。其它的URI,例如:
mailto:myoble@mybole.com.cn
則不屬于定位符,因為它里面不存在根據該標識符來查找的任何數據。這種URI稱為URN(通用資源名)。
*
在Java庫中,URI類不包含用于訪問通用資源標識符設定的任何方法,它的唯一作用是進行分析。相反,URL類則可以打開到達資源的一個字符串。
實驗:通過URL 來下載服務器上的一個資源文件,需要Tomcat服務器支持
?
代碼:
?
?
package cn.com.xinli.test.socket; import java.awt.event.*; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import javax.swing.*; public class HttpDownLoad { public static void main(String[] args) { JFrame jf=new JFrame("下載程序"); jf.setSize(600,400); jf.setLocation(100,100); JPanel p=new JPanel(); JLabel l=new JLabel("Please input URL:"); final JTextField tf=new JTextField(30); p.add(l); p.add(tf); jf.getContentPane().add(p,"North"); final JTextArea ta=new JTextArea(); jf.getContentPane().add(ta,"Center"); JButton btn=new JButton("Download"); jf.getContentPane().add(btn,"South"); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String str=tf.getText(); System.out.println("輸入URI的內容:"+str); String fileName=str.substring(str.lastIndexOf("/")+1); /*下載文件的名字*/ System.out.println("fileName:"+fileName); try { URL url=new URL(str); URLConnection urlConn=url.openConnection(); /** * 由于windos 系統的換行符是\r\n,linux 系統的換行符是\n, * 為了通用我們可以使用系統屬性的方式得到換行符 * */ String line=System.getProperty("line.separator"); ta.append("Host: "+url.getHost()); ta.append(line); ta.append("Port: "+url.getDefaultPort()); ta.append(line); ta.append("ContentType: "+urlConn.getContentType()); ta.append(line); ta.append("ContentLength: "+urlConn.getContentLength()); InputStream is=urlConn.getInputStream(); /** * 以下注釋的部分為按行讀取 關鍵代碼:strLine=br.readLine())!=null * 為注釋的部分為按字節讀取,每次讀一個字節 關鍵代碼:(data=is.read())!=-1 * * 文本和html等格式文件可以按行讀取 * 圖像聲音文件必須按字節讀取,因為這個時候已經沒有 行 的概念 * 其實所有的文件都可以按字節讀取,建議使用按字節讀取 */ //InputStreamReader isr=new InputStreamReader(is); //BufferedReader br=new BufferedReader(isr); FileOutputStream fos=new FileOutputStream(fileName); //String strLine; //while((strLine=br.readLine())!=null) int data; while((data=is.read())!=-1) { // fos.write(strLine.getBytes()); /** * 按行讀取的時候必須有此句,因為按行讀取的時候,每次對一行,并不會 * 把行分割符號寫入輸出流,需要我們手動添加 * */ // fos.write(line.getBytes()); fos.write(data); } //br.close(); is.close(); fos.close(); } catch (Exception ex) { ex.printStackTrace(); } } }); jf.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); jf.show(); } }
?
?
?
啟動TOMCAT,啟動應用程序,下載 /bz/images 應用下的圖片文件到 測試程序的根路徑下
?
?
?
?
成功將服務器上/bz/images/下的一個圖片文件下載到本程序的 根路徑下!
?
?
發揮:
?
此程序以后可以應用到 從另外一個遠端的服務器上下載文件,而不需要走web層,從response對象中得到輸出流
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
