如何用Java读取一个巨大的HTML文件?

时间:2016-10-25 17:54:24

标签: java html large-files file-read

我有一个要求,即必须在我的应用程序的前端读取并显示一个巨大的HTML文件。 HTML文件大小约为25MB。 试过几个选项,如:

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文件内容被读作一行字符串。

有没有办法可以阅读这个文件?

我在这里经历了其他几个问题,看看是否有可能的解决方案,但似乎没有任何问题适合这种情况。

2 个答案:

答案 0 :(得分:1)

@ user811433,我做了一些测试,使用Apache Commons IO读取大小约为800MB的日志文件,执行时没有出错。

  

此方法为文件打开InputStream。当你完成了   使用迭代器,您应关闭流以释放内部   资源。这可以通过调用LineIterator.close()或来完成   LineIterator.closeQuietly(LineIterator)方法。

如果您像Stream一样逐行处理,推荐的使用模式是这样的:

import itertools
import numpy as np
import matplotlib.pyplot as plt

from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix

# import some data to play with
iris = datasets.load_iris()
X = iris.data
y = iris.target
class_names = iris.target_names

# Split the data into a training set and a test set
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

# Run classifier, using a model that is too regularized (C too low) to see
# the impact on the results
classifier = svm.SVC(kernel='linear', C=0.01)
y_pred = classifier.fit(X_train, y_train).predict(X_test)


def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Oranges):
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(iris.target_names))
    plt.xticks(tick_marks, rotation=45)
    ax = plt.gca()
    ax.set_xticklabels((ax.get_xticks() +1).astype(str))
    plt.yticks(tick_marks)

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

cm = confusion_matrix(y_test, y_pred)
np.set_printoptions(precision=2)
print('Confusion matrix, without normalization')
print(cm)
fig, ax = plt.subplots()
plot_confusion_matrix(cm)

plt.show()

一些额外的引用,herehere

答案 1 :(得分:-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();
        }