我在使 URL 连接正常工作时遇到一些问题。我发现如果我创建一个 URL 对象,它就可以正常工作。但之后的一切根本不起作用。起初我以为这可能是因为我没有关闭流,但事实并非如此。
-1 = 失败
1 = 成功
Testing:
URLFail test0 = new URLFail();
URLFail test1 = new URLFail(1);
URLFail test2 = new URLFail(1,1);
OutPut:
0Param 1
1Param -1
2Param -1
现在,如果我切换首先创建哪个对象,结果就会改变。
Testing:
URLFail test2 = new URLFail(1,1);
URLFail test0 = new URLFail();
URLFail test1 = new URLFail(1);
OutPut:
0Param -1
1Param -1
2Param 1
在此实例中,只有 test2 成功。这让我相信每个类只能使用一个 URL 流?
这就是我一直用来访问和解析 URL 的流。
URL url = null;
URLConnection urlConnection = null;
try {
url = new URL("xxxxx"); // In my program this is a proper URL
} catch (MalformedURLException ex) {
return -1;
}
ArrayList<String> index = new ArrayList<String>();
try {
urlConnection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while (in.ready()) {
index.add(in.readLine());
}
in.close();
} catch (IOException ex) {
return -1;
}
到目前为止我还不知道出了什么问题。我认为这可能是因为我尝试访问同一网站的速度太快?
我还尝试过使用 URL 中的 openStream() 方法,在没有 URLConnection 对象的情况下进行操作。任何帮助将不胜感激,也欢迎任何有关代码本身的一般评论。谢谢!
这是整个代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class URLFail {
private int name;
public static void main(String[] args) {
URLFail test0 = null;
URLFail test1 = null;
URLFail test2 = null;
try {
test0 = new URLFail();
System.out.println("First Complete...");
Thread.sleep(1000);
test2 = new URLFail();
System.out.println("Second Complete...");
Thread.sleep(1000);
test1 = new URLFail();
System.out.println("Third Complete...");
} catch (InterruptedException e) {
// TODO: handle exception
}
System.out.println();
System.out.println("0Param " + test0.name);
System.out.println("1Param " + test1.name);
System.out.println("2Param " + test2.name);
}
public URLFail() {
name = getAsList();
}
public int getAsList() {
URL url = null;
URLConnection urlConnection = null;
try {
url = new URL("xxxxx");
} catch (MalformedURLException ex) {
ex.printStackTrace();
return -1;
}
ArrayList<String> index = new ArrayList<String>();
try {
urlConnection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream()));
while (in.ready()) {
index.add(in.readLine());
}
in.close();
} catch (IOException ex) {
ex.printStackTrace();
return -1;
}
if (index.isEmpty()) {
return -1;
} else {
return 1;
}
}
}
我在 google.com 上尝试过,效果很好,所以它一定是我要连接的主机。有没有办法关闭 URL 连接/断开连接?
最佳答案
在每个“return -1”前面插入一个
ex.printStackTrace();
这很可能会告诉您需要了解的内容。
关于java - JAVA中是否可以有多个URL连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373787/