* 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对象中得到输出流