在Java中从URL读取/写入内容的首选方法是什么

时间:2010-05-18 20:57:34

标签: java url

打开与网站的连接然后随后阅读该网页上的信息的首选方法是什么?关于不同部分似乎有许多具体问题,但没有明确和简单的例子。

4 个答案:

答案 0 :(得分:5)

Getting Text from a URL | Example Depot

try {
    // Create a URL for the desired page
    URL url = new URL("http://hostname:80/index.html");

    // Read all the text returned by the server
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    String str;
    while ((str = in.readLine()) != null) {
        // str is one line of text; readLine() strips the newline character(s)
    }
    in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}

说到“写”到网址,我想你会想要Sending a POST Request Using a URL | Example Depot之类的东西。

答案 1 :(得分:1)

Sun Microsystems实际上对此主题有一个tutorial on reading and writing with a URLConnection,这将是一个很好的起点。

答案 2 :(得分:1)

你可以简单地使用它:

InputStream stream = new URL( "http://google.com" ).openStream();

答案 3 :(得分:-3)

由SB链接的Sun Microsystems article将是一个很好的起点。但是,我绝对不会称之为首选方式。首先,它不必要地抛出异常,然后它不会关闭最终的流。此外,它使用我不同意的url.openStream方法,因为即使HTTP error is returned它仍然可以接收输出。

而不是url.openStream我们写道:

HttpURLConnection conn=(HttpURLConnection) url.openConnection()
//Any response code starting with 2 is acceptable
if(!String.valueOf(conn.getResponseCode()).startsWith('2'))
    //Provide a nice useful exception
    throw new IOException("Incorrect response code "+conn.getResponseCode()+" Message: " +getResponseMessage());
InputStream rawIn=conn.getInputStream()
OutputStream rawOut=conn.getOutputStream()
//You may want to add buffering to reduce the number of packets sent
BufferedInputStream bufIn=new BufferedInputStream(rawIn);
BufferedOutputStream bufOut=new BufferedInputStream(rawOut);

请勿在没有处理异常或关闭流的情况下使用此代码!。这实际上很难做到正确。如果您想了解如何正确执行此操作,请查看my answer更具体的fetching images in Android问题,因为我不想在此重写所有问题。

现在,当从服务器检索输入时,除非您正在编写命令行工具,否则您将希望在单独的线程中运行它并显示加载对话框。 Sgarman's answer使用基本的Java线程演示了这一点,而an answer使用Android的AsyncTask类来解决这个问题,使其更加整洁。 class file没有任何Android依赖项,许可证是Apache,因此您可以在非Android项目中使用它。