Java 连续文件读取

Java 连续文件读取,java,file,loops,eof,Java,File,Loops,Eof,我的应用程序中有非常不同的场景。我需要读一些文本文件,并在上面做一些工作 实际上,我想要的是,当我到达行的末尾时,我的Java文件读取游标将停在那里,等待新行追加到文本文件中。实际上我正在读取的文件是一个由服务器生成的实时日志,日志将在每一秒后生成 所以我希望我的文件读取过程永远不会结束,当文件中出现新数据时,它会继续读取文件 public class LogReader { private static boolean canBreak = false; public sta

我的应用程序中有非常不同的场景。我需要读一些文本文件,并在上面做一些工作

实际上,我想要的是,当我到达行的末尾时,我的Java文件读取游标将停在那里,等待新行追加到文本文件中。实际上我正在读取的文件是一个由服务器生成的实时日志,日志将在每一秒后生成

所以我希望我的文件读取过程永远不会结束,当文件中出现新数据时,它会继续读取文件

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
    }
}