2012-07-11 38 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參數。