如何使用 Java 读取正在写入的文件?
我有一个将信息写入文件的应用程序。此信息在执行后用于确定应用程序的通过/失败/正确性。我希望能够在写入文件时读取文件,以便我可以实时执行这些通过/失败/正确性检查。
我认为可以做到这一点,但是在使用Java时涉及哪些问题?如果读取赶上写入,它是否只是等待更多的写入直到文件关闭,或者读取此时会引发异常?如果是后者,我该怎么办?
我的直觉目前正在将我推向BufferedStreams。这是要走的路吗?
我有一个将信息写入文件的应用程序。此信息在执行后用于确定应用程序的通过/失败/正确性。我希望能够在写入文件时读取文件,以便我可以实时执行这些通过/失败/正确性检查。
我认为可以做到这一点,但是在使用Java时涉及哪些问题?如果读取赶上写入,它是否只是等待更多的写入直到文件关闭,或者读取此时会引发异常?如果是后者,我该怎么办?
我的直觉目前正在将我推向BufferedStreams。这是要走的路吗?
无法使用示例,因为它不是阻塞读取。但是,是否使下面的代码正常工作:FileChannel.read(ByteBuffer)
boolean running = true;
BufferedInputStream reader = new BufferedInputStream(new FileInputStream( "out.txt" ) );
public void run() {
while( running ) {
if( reader.available() > 0 ) {
System.out.print( (char)reader.read() );
}
else {
try {
sleep( 500 );
}
catch( InterruptedException ex ) {
running = false;
}
}
}
}
当然,同样的事情可以用作计时器而不是线程,但我将其留给程序员。我仍然在寻找更好的方法,但这现在对我有用。
哦,我要提醒的是:我使用的是1.4.2。是的,我知道我仍然处于石器时代。
如果您想在写入文件时读取文件,并且只读取新内容,那么以下内容将帮助您实现相同的目标。
要运行此程序,您将从命令提示符/终端窗口启动它,并传递文件名以进行读取。它将读取该文件,除非您终止该程序。
java FileReader c:\myfile.txt
当您键入一行文本时,请从记事本中保存它,您将看到在控制台中打印的文本。
public class FileReader {
public static void main(String args[]) throws Exception {
if(args.length>0){
File file = new File(args[0]);
System.out.println(file.getAbsolutePath());
if(file.exists() && file.canRead()){
long fileLength = file.length();
readFile(file,0L);
while(true){
if(fileLength<file.length()){
readFile(file,fileLength);
fileLength=file.length();
}
}
}
}else{
System.out.println("no file to read");
}
}
public static void readFile(File file,Long fileLength) throws IOException {
String line = null;
BufferedReader in = new BufferedReader(new java.io.FileReader(file));
in.skip(fileLength);
while((line = in.readLine()) != null)
{
System.out.println(line);
}
in.close();
}
}