2016-11-08 62 views
-1

我是新的Java和更多與jsoup,但我認爲我只是愚蠢的文件。Java,jsoup和文件有點麻煩

我想創建一個文件解析一些HTML,但.txt只有80 kbs,我知道應該更多的線。可能是jsoup中的元素支持的大小,或者我只是讓緩衝區滿了。

這是我使用的代碼:

public class RetrieveURLs 
{ 
    public static void main(String[] args) 
     throws FileNotFoundException 
    { 
     try { 
      PrintWriter out = new PrintWriter("filename.txt"); 
      for (int i = 1; i < 80; i++) { 
       Document doc = Jsoup.connect(
        "http://elbuenfin.org/buscar/ofertas/pagina/"+ i +"/?entidad_id=&municipio_id=&categoria_id=&descuento_id=&promocion_id=&meses_id=&fulltext=&orderby=&order=").get(); 
       Element tienda = doc.select("div.product").first(); 

       out.println(tienda); 
      } 
     } catch (IOException ex) { 
      Logger.getLogger(RetrieveURLs.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
+0

獲取對文件的訪問並返回它是相當昂貴的操作,所以我們試圖儘可能減少它的數量。由於默認情況下Java類使用緩衝區來保存一部分數據,並且只有當緩衝區已滿時纔會自動將其內容寫入文件。但是在某些時候,當我們完成爲緩衝區生成內容時,可能不足以完全填充它。在這種情況下,我們需要在writer上顯式調用'flush()'方法。或者如果你不想寫任何其他'close()'(它也調用'flush()')。 – Pshemo

+0

爲了確保即使發生一些異常也會調用此方法,我們將它放在'try'的'finally'塊中,其中可能引發這樣的異常。如果你不想明確處理關閉你的資源,你可以使用try-with-resources自動編譯成最後一段來處理關閉流。在這裏這樣做,而不是'嘗試{PrintWriter out = new PrintWriter(「filename.txt」); ...}'使用'嘗試(PrintWriter out = new PrintWriter(「filename.txt」)){..}'。 – Pshemo

+0

我也不認爲這是最大文件大小的問題,因爲根據Jsoup作者在他的回覆發佈在這裏http://stackoverflow.com/a/29713698/1393766它是1MB比你現在得到的更大。 – Pshemo

回答

-1

這不是println(),僅此而已。這應該按預期工作:

public class RetrieveURLs 
{ 
    public static void main(String[] args) 
     throws FileNotFoundException 
    { 
     try { 
      PrintWriter out = new PrintWriter("filename.txt"); 
      for (int i = 1; i < 80; i++) { 
       Document doc = Jsoup.connect(
        "http://elbuenfin.org/buscar/ofertas/pagina/"+ i +"/?entidad_id=&municipio_id=&categoria_id=&descuento_id=&promocion_id=&meses_id=&fulltext=&orderby=&order=").get(); 
       Element tienda = doc.select("div.product").first(); 

       out.write(tienda.toString()); 
      } 
     } catch (IOException ex) { 
      Logger.getLogger(RetrieveURLs.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
+0

你能解釋一下你的答案嗎?它試圖解決/指出什麼問題? – Pshemo