程序要访问互联网资源,就需要用到URL。URL是Uniform Resource Locator的简称(统一资源定位),它是互联网资源的地址,它实际上就是一个互联网资源的访问路径。
例如下面的互联网资源访问路径就是一个URL:
http://www.milihua.com/v9.apk
如果希望下载编程训练营app,可以在浏览器地址栏中输入上面的URL地址,就可以下载编程训练营app到本地。
URL资源可以通过浏览器直接访问,当然也可以使用Java程序直接访问URL资源,使用程序访问URL资源的前提是URL资源能够允许外部程序访问。
在 java.net 包中包含了专门用来处理 URL 的类,该类的名称就是URL,程序可以通过URL类获取 URL 的相关信息、访问互联网上的资源。使用URL类和InputStream类可以读取URL资源。 URL类常用方法说明如下:
URL(String spec)
构造方法,根据指定spec创建一个URL对象。Spec为能够解析为URL的字符串。
InputStream openStream()
该方法打开指向此URL的连接并返回一个用于从该连接读取的InputStream。
URLConnection openConnection()
该方法返回一个URLConnection实例对象,该实例对象表示到由URL引用的远程对象的连接。URLConnection实例在创建时并没有建立实际的网络连接。只有在调用URLConnection.connect()时才会连接远程对象。如果对于URL的协议(如HTTP或JAR),存在一个公共的、专用的URL连接子类,属于以下包之一或它们的子包中的一个:JavaLang.JavaIO、JavaUTL、Java.net,返回的连接将是该子类。例如,对于HTTP,将返回HttpURLConnection,对于JAR,将返回JarURLConnection。
案例1:建立URLTest类,从指定网站读取特定网页文件,并将网页文件内容输出到控制台。
在ip包下新建URLTest类。代码如下:
package ip;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
/**
* @ClassName: URLTest
* @Description: 网络编程(访问网络资源)案例1
* @author 编程训练营
* @date
*
*/
public class URLTest {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
try {
// 打开URL资源
URL url = new URL("http://milihua.com/hello.html");
// 获取输入流,读取URL内容
InputStream stream = url.openStream();
if( null != stream )
{
// 实例化文本缓存输入流,字符编码设置为UTF-8
BufferedReader rd = new BufferedReader(new InputStreamReader(stream, Charset.forName("UTF-8")));
// 调用readAll从输入流中读取内容
String content = readAll(rd);
System.out.print(content);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static String readAll(Reader rd) throws IOException {
// 实例化字符串生成器
StringBuilder sb = new StringBuilder();
int cp;
// 循环读取输入流的内容,返回-1表示读取完成
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
}URLTest程序完成读取网页文件的任务。程序应用URL类访问hello.html网页资源,并获取hello.html网页资源的输入流。利用获取的输入流实例化BufferedReader对象,设置字符编码为UTF-8,hello.html网页资源的字符编码也是UTF-8,这样可以确保读取中文字符时不会产生乱码。程序的readAll()方法从Read输入流按字节循环读取,读取结束后返回一个字符串。
URLTest程序用到了URL类、InputStream类、BufferedReader类、InputStreamReader类,需要使用import语句导入这些类。另外,URL类和InputStream类都会抛出异常,程序需要处理这些异常。
程序执行结果如下图所示:
