用Java阅读网页中的文本

用Java阅读网页中的文本,java,web-services,web-crawler,bufferedreader,Java,Web Services,Web Crawler,Bufferedreader,我是Java新手,我正在尝试创建一个库,用于从Web服务获取巴西地址,但我无法读取响应 在类的构造函数中,我有一个result字符串,我想将响应附加到该字符串中,一旦这个变量填充了响应,我就知道该怎么做了 问题是:出于某种原因,我猜BufferedReader对象不工作,因此没有要读取的响应:/ 代码如下: package cepfacil; import java.net.*; import java.io.*; import java.io.IOException; public cla

我是Java新手,我正在尝试创建一个库,用于从Web服务获取巴西地址,但我无法读取响应

在类的构造函数中,我有一个
result
字符串,我想将响应附加到该字符串中,一旦这个变量填充了响应,我就知道该怎么做了

问题是:出于某种原因,我猜
BufferedReader
对象不工作,因此没有要读取的响应:/

代码如下:

package cepfacil;

import java.net.*;
import java.io.*;
import java.io.IOException;

public class CepFacil {
    final String baseUrl = "http://www.cepfacil.com.br/service/?filiacao=%s&cep=%s&formato=%s";
    private String zipCode, apiKey, state, addressType, city, neighborhood, street, status = "";

    public CepFacil(String zipCode, String apiKey) throws IOException {
        String line = "";

        try {
            URL apiUrl = new URL("http://www.cepfacil.com.br/service/?filiacao=" + apiKey + "&cep=" + 
                    CepFacil.parseZipCode(zipCode) + "&formato=texto");

            String result = "";

            BufferedReader in = new BufferedReader(new InputStreamReader(apiUrl.openStream()));

            while ((line = in.readLine()) != null) {
                result += line;
            }
            in.close();

            System.out.println(line);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        this.zipCode = zipCode;
        this.apiKey = apiKey;
        this.state = state;
        this.addressType = addressType;
        this.city = city;
        this.neighborhood = neighborhood;
        this.street = street;
    }
}
下面是代码的工作原理,您构建一个如下的对象:

String zipCode = "53416-540";
String token = "0E2ACA03-FC7F-4E87-9046-A8C46637BA9D";

CepFacil address = new CepFacil(zipCode, token);

// so the apiUrl object string inside my class definition will look like this:
// http://www.cepfacil.com.br/service/?filiacao=0E2ACA03-FC7F-4E87-9046-A8C46637BA9D&cep=53416540&formato=texto
// which you can check, is a valid url with content in there
为了简洁起见,我省略了这段代码的一些部分,但是构造函数中调用的所有方法都是在我的代码中定义的,并且没有编译或运行时错误

我非常感谢您能给我的任何帮助,我也很想听到最简单可行的解决方案:)

提前谢谢


更新:现在我可以解决这个问题(向@Uldz提供巨大的道具,让我指出问题所在),它是开源的

可能有多种原因。 将您的
URL
包装在
HttpURLConnection
中,这将帮助您查看响应代码以及有关从服务器获得的响应的更多信息。

System.out.println(line + "rodrigo"); 

输出行不是结果。也许最后一行是空的?

您可以/应该向InputStreamReader添加编码。 然后结果不会添加换行符

        BufferedReader in = new BufferedReader(new InputStreamReader(apiUrl.openStream()));

        while ((line = in.readLine()) != null) {
            System.out.println("Line: " + line);
            String[] keyValue = line.split("\\s*=\\s*", 2);
            if (keyValue.length != 2) {
                System.err.println("*** Line: " + line);
                continue;
            }
            switch (keyValue[0]) {
                case "status":
                    status = keyValue[1];
                    break;
                ...
                default:
                    System.err.println("*** Key wrong: " + line);
            }
            result += line + "\n";
        }
        in.close();