2016-10-25 7 views
1

У меня есть требование, чтобы в главном интерфейсе моего приложения был прочитан и отображен огромный HTML-файл. Размер файла HTML составляет около 25 МБ. Пробовал несколько вариантов, как:Как читать огромный HTML-файл в Java?

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 варианта не удается прочитать файл. Я не вижу ошибки. Обработка просто прекращается, и веб-страница выдает всплывающее окно «error» без информации.

Проблема заключается в том, что весь контент HTML-файла считывается как одна строка строки.

Есть ли способ, которым я могу прочитать этот файл?

Я рассмотрел несколько других вопросов здесь, чтобы узнать, есть ли возможное решение, но ничего не работает для этого случая.

+0

пакет SAX-парсер в Java является довольно хороший. Я использовал его, и он очень быстрый и простой. Он анализирует любой 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); 
    } 

Некоторые дополнительные ссылки, here и here

-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(); 
     } 

 Смежные вопросы

  • Нет связанных вопросов^_^