2013-11-21 78 views
-1

你好,我是一个java和编程的新手,所以原谅我,如果我错了东西容易。我的目标是导入一个文本文件,扫描每一行,如果有东西被读取,则测试该行(这是一个URL),然后将其打印到输出文件。因此,该程序正在测试每个URL,如果URL是有效的(工作),我将在新的输出文件中打印该行。Java测试URL请求测试

我的问题是测试URL部分。它读取该行以便打印该URL,但是它会多次打印任何建议?有没有办法让它打印一次?我想我知道它会多次打印,因为它一行一行地读取HTML代码。

try 
{ 
    // Test URL Connection 
    URL url = new URL("http://www." + line); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.flush(); 

    // Get the response 
    rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    while((lines = rd.readLine()) != null) 
    { 
     System.out.println(line); 
    } 
} 
catch(Exception e) 
{ 
    System.out.println(e.toString()); 
} 

回答

0

您的代码正在将行读入名为“lines”的变量中,但是您正在打印出行变量。该行变量是你用什么来创建你的网址:

URL url = new URL("http://www."+line); 

如果你只想打印出的URL,那么你可能要考虑构造URL,像这样的字符串:

String targetUrl = String.format("http://www.%s", domainName); 
System.out.println(targetUrl); 

然后创建URL对象。

URL url = new URL(targetUrl); 

如果你想打印出来的内容与目标URL被检索,然后更改代码打印出“行”,而不是:

System.out.println(lines); 

它甚至会更好,使用更描述性变量名称。例如,不是使用“line”构造URL,而是使用像“domainName”这样的变量名称。然后,当你一次读一行时,你可以使用变量名“line”。

// Assuming that domainName is set before the try block 
try 
{ 
    // Test URL Connection 
    URL url = new URL("http://www."+domainName); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.flush(); 

    String line = null; 

    // Get the response 
    rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    while ((line = rd.readLine()) != null) 
    { 
     System.out.println(line);      
    } 
} 
catch (Exception e) 
{ 
    System.out.println(e.toString()); 
}