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が原因である可能性があります。

また、大きなファイル char を char ごとに読み取っていますが、これは効果的ではないと思います。append()メソッドが呼び出される回数を知っていますか?

@joan が -Xmx JVM オプションを指摘したように、これはスタックオーバーフローではなくヒープ サイズの問題に関連しているため、これは役に立たないと思います。SO は通常、大きな再帰を実行している場合、または一般的に何かが何度も呼び出されて変数がスタックをいっぱいにした場合にスローされます。

于 2013-03-28T10:48:34.380 に答える
0

ここでの問題は、最大ヒープ サイズです。

-Xmx JVM オプションを使用して、Java の最大ヒープ サイズを増やします。お役に立てれば。

于 2013-03-28T10:46:28.110 に答える