2016-10-25 86 views
1

我有一個要求,必須在我的應用程序的前端讀取並顯示一個巨大的HTML文件。 HTML文件大小約爲25MB。 試了幾個選項,如:如何在Java中讀取一個巨大的HTML文件?

Option 1: 
    try (Scanner scnr = new Scanner(file);) { 
       while (scnr.hasNextLine()) { 
        String line= scnr.nextLine(); 
       } 
    } 
Option 2: 
    FileUtils.readFileToString(file, "UTF-8"); 
Option 3: 
    IOUtils.toString(new FileInputStream(new File(file)), "UTF-8") 

所有上述3個選項都無法讀取該文件。我沒有看到任何錯誤。處理只是停止,網頁拋出一個沒有信息的「錯誤」彈出窗口。

問題似乎是整個HTML文件內容被讀爲一行字符串。

有沒有一種方法可以讀取這個文件?

我在這裏經歷了其他幾個問題,看看是否有可能的解決方案,但似乎沒有任何工作的情況下。

+0

Java的SAX解析器包是相當不錯。我已經使用它,它非常快速和簡單。它解析任何XML,所以應該適用於HTML。 – Gendarme

+1

@Gendarme這是可怕的建議。它也需要XHTML,SAX不會解析HTML。 – Kayaman

+0

爲什麼不解析HTML? – Gendarme

回答

1

@ user811433,我用Apache Commons IO做了一些測試,讀取一個大小約爲800MB的日誌文件,並且在執行過程中沒有發生錯誤。

此方法打開文件的InputStream。當您用迭代器完成 時,您應關閉流以釋放內部 資源。這可以通過調用LineIterator.close()或 LineIterator.closeQuietly(LineIterator)方法來完成。

如果您喜歡的流線工藝路線,推薦的使用模式是這樣的:

File file = new File("C:\\Users\\lucas\\Desktop\\file-with-800MB.log"); 

    LineIterator it = FileUtils.lineIterator(file, "UTF-8"); 
    try {   
     while (it.hasNext()) { 
      String line = it.nextLine(); 
      // do something with line, here just sysout... 
      System.out.println(line); 
     } 
    } finally { 
     LineIterator.closeQuietly(it); 
    } 

一些額外的引用,herehere

-1
try { 
      File f=new File("test.html"); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f))); 
      String content=null; 

      while((content=reader.readLine())!=null) 
      { 
        System.out.println(content); 
      } 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
相關問題