2012-07-11 68 views
0

我的程序进入我的uni结果页面,找到所有链接并保存到文件。然后我读取该文件并仅复制包含所需链接的行并将其保存到另一个文件。然后我再次解析它以提取所需的数据java数据结构替换文件io

public class net { 

    public static void main(String[] args) throws Exception { 
     Document doc = Jsoup.connect("http://jntuconnect.net/results_archive/").get(); 

     Elements links = doc.select("a"); 
     File f1 = new File("flink.txt"); 
     File f2 = new File("rlink.txt"); 

      //write extracted links to f1 file 
     FileUtils.writeLines(f1, links); 

      // store each link from f1 file in string list 
     List<String> linklist = FileUtils.readLines(f1); 

      // second string list to store only required link elements 
     List<String> rlinklist = new ArrayList<String>(); 

     // loop which finds required links and stores in rlinklist 
     for(String elem : linklist){ 
      if(elem.contains("B.Tech") && (elem.contains("R07")||elem.contains("R09"))){ 
       rlinklist.add(elem);     
      }   
     }   
     //store required links in f2 file 
     FileUtils.writeLines(f2, rlinklist); 

     // parse links from f2 file 
     Document rdoc = Jsoup.parse(f2, null); 
     Elements rlinks = rdoc.select("a"); 

     // for storing hrefs and link text 
     List<String> rhref = new ArrayList<String>(); 
     List<String> rtext = new ArrayList<String>(); 

     for(Element rlink : rlinks){ 
      rhref.add(rlink.attr("href")); 
      rtext.add(rlink.text()); 
     } 

    }// end main 

} 

我不想创建文件来执行此操作。有没有更好的方式来获取外部链接并只链接特定网址的文本而不创建文件?

它使用Apache的公共文件实用程序,jsoup

+0

您已经拥有内存中的列表('Elements links')。就此操作。您的代码写入和从文件读取是完全没有必要的。 – vanza 2012-07-11 04:24:50

回答

1

这里是你如何能摆脱第一个文件的读/写:

Elements links = doc.select("a"); 
List<String> linklist = new ArrayList<String>(); 
for (Element elt : links) { 
    linklist.add(elt.toString()); 
} 

第二个往返,如果我理解的代码,旨在提取符合特定测试的链接。您可以使用相同的技术在内存中执行此操作。

我看到您依靠Jsoup.parse从所选链接中提取href和链接文本。您可以在内存中通过将所选节点写入StringBuffer,将其转换为String,方法是将其调用toString()方法,然后使用Jsoup.parse方法之一执行String而不是File参数。