我正在尝试在网站上阅读并将其保存为字符串。我正在使用下面的代码,它在Eclipse中运行得非常好。但是当我尝试通过Windows中的命令行运行程序时,如“java MyProgram”,程序启动并挂起并且从不读取URL。任何人都知道为什么会发生这种情况?
URL link = new URL("http://www.yahoo.com");
BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));
//InputStream in = link.openStream();
String inputLine = "";
int count = 0;
while ((inputLine = in.readLine()) != null)
{
site = site + "\n" + inputLine;
}
in.close();
...
答案 0 :(得分:1)
可能是因为您在代理之后,Eclipse会自动添加设置以配置它。
如果您位于代理后面,则在从命令提示符运行时,请尝试设置java.net.useSystemProxies
属性。您还可以使用here(http.proxyHost
,http.proxyPort
)找到一些网络属性来手动配置代理设置。
答案 1 :(得分:1)
我遇到了这样的问题并找到了解决方案。 这是我的工作代码:
// Create a URL for the desired page
URL url = new URL("your url");
// Get connection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000); // 5 seconds connectTimeout
connection.setReadTimeout(5000 ); // 5 seconds socketTimeout
// Connect
connection.connect(); // Without this line, method readLine() stucks!!!
// because it reads incorrect data, possibly from another memory area
InputStreamReader isr = new InputStreamReader(url.openStream(),"UTF-8");
BufferedReader in = new BufferedReader(isr);
String str;
while (true) {
str = in.readLine();
if(str==null){break;}
listItems.add(str);
}
// Closing all
in.close();
isr.close();
connection.disconnect();
答案 2 :(得分:0)
如果这是你的所有代码都在做的话,那么它没有理由不能从命令行运行。我怀疑你已经删除了什么坏了。例如:
public static void main(String[] args) throws Exception {
String site = "";
URL link = new URL("http://www.yahoo.com");
BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));
//InputStream in = link.openStream();
String inputLine = "";
int count = 0;
while ((inputLine = in.readLine()) != null) {
site = site + "\n" + inputLine;
}
in.close();
System.out.println(site);
}
工作正常。另一种可能性是,如果您在Eclipse中运行它,并且在两台不同的计算机上从命令行运行它,后者无法到达http://www.yahoo.com。