我正在使用线程来命中arrayList中的url。需要将不工作的URL存储在另一个arraylist中。但是,不工作的URL列表每次都会更改。获取格式错误的网址例外。即使对于工作网址也会发生此异常(当尝试手动命中它们时)。
public class ThreadTest {
static int i = 0;
static ArrayList<String> arrayOfNotWorking = new ArrayList<>();
public static void main(String[] args) {
ArrayList<String> arrayOfUrl = new ArrayList<>();
ThreadTest threadTest = new ThreadTest();
arrayOfUrl.add("https://www.parkbus.ca");
arrayOfUrl.add("https://affectingchange.com/projects/fogo-island-");
arrayOfUrl.add("https://skoll.socialedge.org/?293@@.1ad86d9e");
arrayOfUrl.add("https://skollsocialedge.org?293@@.1ad86");
arrayOfUrl.add("https://www.jitabangladesh.com");
arrayOfUrl.add("https://www.ngobiz.org/picture/File/Social Enterpeuneur-The Case of Definition.pdf");
arrayOfUrl.add("https://www.mealshare.ca/en/home/");
arrayOfUrl.add("https://www.oecd.org/cfe/leed/38870491.pdf");
arrayOfUrl.add("https://doi.org/10.1787/tour-2016-en");
arrayOfUrl.add("https://www.youtube.com/user/PlaneterraCares");
try {
ExecutorService threadPool = Executors.newFixedThreadPool(arrayOfUrl.size());
for (i = 0; i < arrayOfUrl.size(); i++) {
threadPool.submit(new Runnable() {
public void run() {
threadTest.hitUrl(arrayOfUrl.get(i));
}
});
}
threadPool.shutdown();
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
for (String string : arrayOfNotWorking) {
System.out.println(string);
}
} catch (InterruptedException ex) {
System.out.println(ex.getMessage());
}
}
public static void hitUrl(String actualUrl) {
try {
URL obj = new URL(actualUrl);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
if (responseCode > 199 && responseCode < 400) {
}
} catch (Exception ex) {
arrayOfNotWorking.add(actualUrl);
}
}
}
答案 0 :(得分:0)
您已在notWorkingUrl
方法中定义了hitUrl
,因此每次调用该方法时,变量都会被初始化。
您应该在类中定义String类型的列表,并将不可用的URL添加到该列表中。
答案 1 :(得分:0)
如果使用无效协议或由于有效编码而无法解析url字符串,则抛出java.net.malformedurlexception。
尝试识别此类无效网址的常见问题,然后您可以使用URLEncoder或String类方法格式化此类网址