Logo

郎哥编程

访问互联网资源

2020-01-10 211

程序要访问互联网资源,就需要用到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类都会抛出异常,程序需要处理这些异常。

程序执行结果如下图所示:

image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论