想要阅读最大1MB大小的文本文件的完整内容

时间:2013-03-28 10:40:44

标签: java

在JAVA中我想阅读.log文件的完整内容,其大小最大为1MB,我需要将它存储在StringBuilder中

我尝试使用此代码,但提供异常STACKERRORFLOW。

            String fileName = "C://test//.log";
    File testfile = new File(fileName);
    int ch;
    StringBuilder strcontent = new StringBuilder();
    try
    {
        FileInputStream fis = new FileInputStream(testfile);
        while((ch = fis.read()) != -1)
            strcontent.append((char)ch);
        fis.close();        
    }
            System.out.println(strcontent.toString());

它会出现什么问题。

2 个答案:

答案 0 :(得分:2)

如果您想阅读日志文件,我建议您使用java.io.BufferedReader

BufferedReader r = null;
File testfile = new File("C://test//.log");
StringBuilder b = new StringBuilder();
    try {
        r = new BufferedReader(new FileReader(testfile));
        String line = null;
        while ((line = r.readLine()) != null) {
            b.append(line);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
       try {
          r.close()
       }
       catch (Exception ex) {
          ex.printStackTrace();
       }
    }

Stackoverflow 可能会导致@MadProgrammer指出。

而且你正在通过char读取更大的文件字符,我认为这是无效的。你知道append()方法被称为多少次?

由于@joan指出-Xmx JVM选项,我认为这无济于事,因为这与堆大小问题有关,而不是堆栈溢出。当你进行大的递归时或者通常在很多次调用某些东西并且变量填满堆栈时,通常会抛出SO。

答案 1 :(得分:0)

这里的问题是最大堆大小。

使用-Xmx JVM选项增加Java最大堆大小。希望这会有所帮助。