2

在 JAVA 中,我想读取最大为 1MB 大小的 .log 文件的完整内容,我需要将其存储在 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());

它会出现什么问题。

4

2 回答 2

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

正如@MadProgrammer 指出的那样,Stackoverflow可能会导致。

而且您正在逐个字符地读取更大的文件,我认为这不是有效的。你知道append()方法会被调用多少次吗?

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

于 2013-03-28T10:48:34.380 回答
0

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

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

于 2013-03-28T10:46:28.110 回答