import java.net.*;
import java.io.*;
import java.sql.*;
import java.util.*;
public class URLConnectionReader {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/EMP";
static final String USER = "root";
static final String PASS = "password";
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
URL o = new URL("http://www.worldportsource.com/countries.php");
URLConnection yc = o.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
ReadURL ru = new ReadURL();
Connection conn = null;
Statement stmt= null;
String[] va0 = new String[200];
String[] va1 = new String[197];
//ReadURL[] ru = new ReadURL[200];
String inputLine;
String table="<table";
String dtable="</table";
String dtr="</tr>";
String tr="<tr";
String link="http://www.worldportsource.com";
String endcontent="-- end content --";
String val0 =null;
String val1=null;
String vol0=null;
String td="<td>";
String dtd="</td";
int x=0,x1=0,z=0,s=0,j=0;
inputLine = in.readLine();
String inputLine2 = null;
try{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
}
catch(SQLException se){se.printStackTrace();}//Handle errors for JDBC
catch(Exception e){ e.printStackTrace();}//Handle errors for Class.forName
do
{
if(inputLine.indexOf("- end content -")!=-1)
z++;
if(z<1){
if(inputLine.indexOf("- start content -")!=-1)
{x++;}
if(x>=3)
{
if(inputLine.indexOf("<tr")!=-1)
s++;
if(s>=2){
if(inputLine.indexOf("php\">")!=-1){
val0=(inputLine.substring(inputLine.indexOf("php\">")+5,inputLine.indexOf("</a>")));
if(inputLine.indexOf("a href=")!=-1){
val1=link+(inputLine.substring(inputLine.indexOf("a href=\"")+8,inputLine.lastIndexOf("\">")));
j++;
va0[j]=val0;
va1[j]=val1;
}}
}
}
}//z if
}while((inputLine = in.readLine())!= null);
ru.sendURL(va1);
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){}
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}
in.close();
}
}
class ReadURL{
Scanner scan = new Scanner(System.in);
String[] al=null;
int p=1;
URL o1= null;
Scanner sc2=null;
public void sendURL(String []t) throws Exception
{
al=t;
System.out.println(""+al[p]);
for(p=1;p<t.length;p++)
getURL(al[p]);
}
public void getURL(String t) throws Exception
{
String[] vol = new String[200];
String country=null;
String inputLine;
int x1=0,i=0,b=0,z1=0,table=0;
o1 = new URL(t);
sc2 = new Scanner(o1.openStream());
inputLine= sc2.nextLine();
while((inputLine = sc2.nextLine())!=null) {
if(inputLine.indexOf("<div")!=-1)
table++;
if(table==12)
{
country = (inputLine.substring(inputLine.lastIndexOf("php\">")+5,inputLine.lastIndexOf("</a")));
table++;
}
if(inputLine.indexOf("- end content -")!=-1)
z1++;
if(z1<1){
if(inputLine.indexOf("- start content -")!=-1)
{x1++;}
if(x1>=3)
{
if(inputLine.indexOf("<table")!=-1)
b++;
if(b>=1){
if(inputLine.indexOf("php\">")!=-1){
vol[i]=(inputLine.substring(inputLine.indexOf("php\">")+5,inputLine.indexOf("</a")));
System.out.println(""+country+"\t"+vol[i]);
i++;
}//("php\"")
}//(x1>=2)
}//ifb>1
}//endcontent
}//while
}//method close
}//clas
字符串数组传递给sendURL(),字符串有196个链接 getURl假设采用每个链接并解析它并返回每个链接的端口名称。 但它仅适用于传递的第一个链接。 即我只获得一个国家链接的端口号.. 我想要显示所有链接的端口号
答案 0 :(得分:1)
您的代码无法编译,您将在myArray[3]="http://www.worldportsource.com/ports/index/IND.php";
点击一个ArrayOutOfBoundException
要回答您的标题,您没有使用相同的网址对象,因为您多次调用新网址(myUrl) - &gt;每个new表示创建一个新对象
答案 1 :(得分:0)
我不认为此代码会编译。您有变量&#34; o1&#34;的重复声明。当myArray的大小为3时,你会尝试分配myArray [3],你会遇到一个运行时异常。你的逻辑是每次在循环中创建新的URL对象,所以那里不应该有任何问题。如果你还没有这样做,你必须关闭你打开的流然后到那个循环结束。
如果从命令行执行程序,很可能是您正在执行上一个成功编译的类文件。