URL
类可以提供URL(Uniform Resource Locator)的Protocol、Host、Port、File、named
anchor与URLStreamHandler等信息,它拥有几个构造函数,它们皆需处理MalformedURLException:
public URL(String url)
public URL(String protocol, String host, String file)
public URL(String protocol, String host, int port, String file)
public URL(URL u,String s)
URL类可以由以下几个方法取得信息:
public String getProtocol()
public String getHost()
public int getPort()
public String getFile()
public String getRef()
其中getFile()会包括从主机名称后至文件名称的字符串,包括/,而getRef()则是取回引用点名称,中文俗称网页中的“书签”,下面这个程序示范这几个方法的作用:
package onlyfun.caterpillar;
import java.net.*;
public class UrlInfo { public static void main(String[] args) { try { URL url = new URL(args[0]); System.out.printf("URL: %s%n", url); System.out.printf("Protocal: %s%n", url.getProtocol()); System.out.printf("Host: %s%n", url.getHost()); System.out.printf("Port: %d%n", url.getPort()); System.out.printf("File: %s%n", url.getFile()); System.out.printf("REF: %s%n", url.getRef()); } catch(MalformedURLException e) { e.printStackTrace(); } } }
当执行程序时给定的参数为http://caterpillar.onlyfun.net:8080/admin/setup.html#justin,执行结果如下:
URL: http://caterpillar.onlyfun.net:8080/admin/setup.html#justin
Protocal: http
Host: caterpillar.onlyfun.net
Port: 8080
File: /admin/setup.html
REF: justin
|
URL类有三个方法可以取得指定的URL数据,这三个方法必须处理IOException:
public final InputStream openStream()
public URLConnection openConnection()
public final Object getContent()
在这边先示范openStream(),它会自动处理连线之间的协定动作,并传回一个InputStream对象,所以可以将它塞入BufferedReader或BufferedInputStream等I/O类,再透过它来读取服务器传来的数据。
下面这个程序即利用openStream()取得指定网址的数据,并自动将数据储存在对应文件名称之中,由于是使用BufferedInputStream,您可以用它来储存HTML网页,也可以储存图片:
package onlyfun.caterpillar;
import java.io.*; import java.net.*;
public class Download { public static void main(String[] args) { try { URL url = new URL(args[0]); String fileName = url.getFile().substring( url.getFile().lastIndexOf('/') + 1);
BufferedInputStream inputStream = new BufferedInputStream(url.openStream()); BufferedOutputStream outputStream = new BufferedOutputStream( new FileOutputStream(fileName));
int read = 0; while((read = inputStream.read()) != -1) { outputStream.write(read); } inputStream.close(); outputStream.flush(); outputStream.close(); } catch(Exception e) { e.printStackTrace(); } } }
|