* URL(Uniform Resource Locator ),通用資源定位符。 http://www.mybole.com.cn/index.asp 就是一個URL。
*
URI(Uniform Resource Identifier),通用資源標識符。
*
URI純粹是個符號結(jié)構(gòu),用于指定構(gòu)成Web資源的字符串的各個不同部分。URL是一種特殊類型的URI,它包含了用于查找某個資源的足夠信息。其它的URI,例如:
mailto:myoble@mybole.com.cn
則不屬于定位符,因為它里面不存在根據(jù)該標識符來查找的任何數(shù)據(jù)。這種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的內(nèi)容:"+str);
String fileName=str.substring(str.lastIndexOf("/")+1);
/*下載文件的名字*/
System.out.println("fileName:"+fileName);
try {
URL url=new URL(str);
URLConnection urlConn=url.openConnection();
/**
* 由于windos 系統(tǒng)的換行符是\r\n,linux 系統(tǒng)的換行符是\n,
* 為了通用我們可以使用系統(tǒng)屬性的方式得到換行符
*
*/
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
* 為注釋的部分為按字節(jié)讀取,每次讀一個字節(jié) 關鍵代碼:(data=is.read())!=-1
*
* 文本和html等格式文件可以按行讀取
* 圖像聲音文件必須按字節(jié)讀取,因為這個時候已經(jīng)沒有 行 的概念
* 其實所有的文件都可以按字節(jié)讀取,建議使用按字節(jié)讀取
*/
//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/下的一個圖片文件下載到本程序的 根路徑下!
?
?
發(fā)揮:
?
此程序以后可以應用到 從另外一個遠端的服務器上下載文件,而不需要走web層,從response對象中得到輸出流
?
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

