3

ログをファイルに書き込むプログラムを実行していて、それを 1 行ずつ読みたいと思っています。InputStream、特にDataInputStream、その利用可能な方法を使用してみました。しかし、それにはreadLineメソッドがなく、非推奨であり、BufferedReader使用するためにラップすることが提案されましたreadLine。しかし、私がBufferedReaderそれを使用すると、すべての行を読み取るのではなく、どういうわけか1行の読み取りで停止します。

public void read(DataInputStream ins) {
        try {
            while(true) {
                if(ins.available() > 0) {
                    //BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
                    //System.out.println(reader.readLine());
                    System.out.println(ins.readLine());
                }
                else {
                    Thread.sleep(200);
                }
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
}

そのため、コードは で動作しますins.readLine()が、非推奨であり、Java のドキュメントによると、BufferedReader. しかし、それではreader.readLine()期待どおりに機能しません。

また、これは標準的な問題であると確信しているため、これを行うための他のより良い Java の方法はありますか。Trailer クラスについてどこかで読みました。しかし、それをテストすることはできません。

4

1 に答える 1

0

Java でファイルを継続的に読み取るにはどうすればよいですか?から

The trick is to use a java.io.RandomAccessFile, and periodically check if the file length is greater that your current file position. If it is, then you read the data. When you hit the length, you wait. wash, rinse, repeat.

ただし、相互排除に対処する必要があります (一度に読み書きできるのは 1 つだけです。そうしないと、データが破損する可能性があります)。

BufferedReader を使用することになった場合、一度に 1 行ずつ読み取ります。複数を読み込みたい場合は、次のようにループを使用できます。

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
while ((sCurrentLine = br.readLine()) != null) 
{
    System.out.println(sCurrentLine);
}

これにより IOException fyi が発生する可能性があるため、それを try/catch でラップするか、メソッドにスローさせて別の場所で処理させます。

ソース: http://www.mkyong.com/java/how-to-read-file-from-Java-bufferedreader-example/

于 2013-06-20T16:08:21.327 に答える