我有一个奇怪的问题。过去,我曾经使用自己编写的程序来检查fanfiction.net上的故事是否开辟了新的篇章,并且该程序即使在现在也仍然可以正常工作(尽管它的GUI仍有很多不足之处)。
但是,当我尝试制作一个新版本时,即使我使用的代码完全相同(复制粘贴),我似乎也无法加载该网页。这是下面的代码。当将类似 https://www.fanfiction.net/s/11012678/36 的URL发送到nextExists方法时,它应返回'true'。我的旧程序可以,但是即使它是相同的代码,也不会。
我唯一想到的可能是,我使用的是新版本的Eclipse,这可能会导致它错误地编码,但是我尝试检查所有常见的编码类型,但没有提供HTML纯文本。
有人知道这是什么原因吗?如果我做对了,这不是灾难,但是我希望将来知道,以防我再次遇到相同的问题。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Util {
private static final String BEFORE = "<button class=btn TYPE=BUTTON onClick=\"self.location='", AFTER = "'\">Next ></button>", SITE = "fanfiction.net";
public static String readSite(String path) throws Exception{
URL url = new URL(path);
BufferedReader in = null;
String line;
try{
StringBuilder builder = new StringBuilder();
in = new BufferedReader(new InputStreamReader(url.openStream()));
line = in.readLine();
if(line == null){
return null;
}
builder.append(line);
while((line = in.readLine()) != null){
builder.append('\n' + line);
}
return builder.toString();
} finally{
if(in != null){
in.close();
}
}
}
public static String updatePathToEnd(String path) throws Exception{
outer: while(nextExists(path)){
String data = readSite(path);
if(path.contains(SITE)){
String link = path.substring(0, path.indexOf(SITE) + SITE.length()) + data.substring(data.indexOf(BEFORE) + BEFORE.length(), data.indexOf(AFTER));
if(readSite(link) != null) {
path = link;
continue outer;
}
}
}
return path;
}
public static boolean nextExists(String path) throws Exception{
String text = readSite(path);
if(path.contains(SITE)){
return text==null ? false : text.contains(AFTER);
}
return false;
}
}
答案 0 :(得分:1)
我在bluej中尝试过并且工作完美,看来问题出在Eciplse 问候