读取另一个进程正在写入的文件的最佳(影响最小?)方法是什么?

时间:2009-01-13 08:32:30

标签: java file-io

我正在寻找影响最小的方法来读取一些不同的日志文件。通过“最小影响”,我的意思是读取不会影响日志轮换,不会导致过度的I / O活动等等。我希望用Java实现这一点...

谷歌向我提供了以下一些代码:

FileStream fs = new FileStream("C:\foo.txt",
FileMode.Open,FileAccess.Read, FileShare.ReadWrite);

这应该是失败的实现,但是,我不太确定我的Java“剪切和粘贴”能力,并想知道是否有更好的方法来实现这一点。这里的大图是转移一些apache和tomcat日志,根据应用程序活动寻找一些关键条目,并根据条目采取一些行动。无论如何,任何提示?谢谢!

1 个答案:

答案 0 :(得分:1)

here

中选择一个

:)

我没有尝试过所有这些,但Jon Skeet对如何不这样做有一些有用的评论。

我的赌注是nio

 FileInputStream stream = new FileInputStream(new File(path));
  try {
    FileChannel fc = stream.getChannel();
    MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
    /* Instead of using default, pass in a decoder. */
    return CharSet.defaultCharset().decode(bb).toString();
  }
  finally {
    stream.close();
  }

查看该问题的详细信息。