Java 连续文件读取
我的应用程序中有非常不同的场景。我需要读一些文本文件,并在上面做一些工作 实际上,我想要的是,当我到达行的末尾时,我的Java文件读取游标将停在那里,等待新行追加到文本文件中。实际上我正在读取的文件是一个由服务器生成的实时日志,日志将在每一秒后生成 所以我希望我的文件读取过程永远不会结束,当文件中出现新数据时,它会继续读取文件Java 连续文件读取,java,file,loops,eof,Java,File,Loops,Eof,我的应用程序中有非常不同的场景。我需要读一些文本文件,并在上面做一些工作 实际上,我想要的是,当我到达行的末尾时,我的Java文件读取游标将停在那里,等待新行追加到文本文件中。实际上我正在读取的文件是一个由服务器生成的实时日志,日志将在每一秒后生成 所以我希望我的文件读取过程永远不会结束,当文件中出现新数据时,它会继续读取文件 public class LogReader { private static boolean canBreak = false; public sta
public class LogReader {
private static boolean canBreak = false;
public static void startReading(String filename) throws InterruptedException, IOException {
canBreak = false;
String line;
try {
LineNumberReader lnr = new LineNumberReader(new FileReader(filename));
while (!canBreak)
{
line = lnr.readLine();
if (line == null) {
System.out.println("waiting 4 more");
Thread.sleep(3000);
continue;
}
processLine(line);
}
lnr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void stopReading() {
canBreak = true;
}
private static void processLine(String s) {
//processing line
}
}
我写了这个代码
try {
Scanner sc = new Scanner(file);
while (sc.hasNextLine())
{
String i = sc.nextLine();
processLine(i); //a method which do some stuff on the line which i read
if(thread==1)
{
System.out.print("After loop in the file"); //just for printing
}
while(!(sc.hasNextLine())) //in the loop until new line comes
{
System.out.println("End of file");
Thread.sleep(100000);
System.out.println("Thread is waiting");
thread++;
}
if(thread==1)
{
System.out.println("OUt of the thread");
}
//System.out.println(i);
}
sc.close();
System.out.println("Last time stemp is "+TimeStem);
System.out.println("Previous Time Stemp is "+Previous_time);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
这是我的代码,我认为我的程序将保持在第二个while循环中,当文件末尾到达时,当文件附加时,它将再次开始读取文件。但这并没有发生,当到达文件末尾时,我的程序会等待一秒钟,但不会读取文件中附加的下一行。您是否可以简单地使用unix命令
tail-f
?另请参见:1)对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。2) 源代码中只有一行空白就足够了。{
之后或}
之前的空行通常也是多余的。您所说的第二个while循环是什么意思?我看不到任何一秒钟的while循环。你真的想让线程休眠100秒吗?谢谢,伙计,这真的很有帮助。:)
public class LogReader {
private static boolean canBreak = false;
public static void startReading(String filename) throws InterruptedException, IOException {
canBreak = false;
String line;
try {
LineNumberReader lnr = new LineNumberReader(new FileReader(filename));
while (!canBreak)
{
line = lnr.readLine();
if (line == null) {
System.out.println("waiting 4 more");
Thread.sleep(3000);
continue;
}
processLine(line);
}
lnr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void stopReading() {
canBreak = true;
}
private static void processLine(String s) {
//processing line
}
}