Сканер Java не будет следовать за файлом

Попытка выследить / анализирует некоторые файлы журнала. Записи запускаются с даты, затем может охватить много строк.

Это работает, но никогда не видит новые записи в файл.

File inputFile = new File("C:/test.txt");
InputStream is = new FileInputStream(inputFile);
InputStream bis = new BufferedInputStream(is);
//bis.skip(inputFile.length());
Scanner src = new Scanner(bis);
src.useDelimiter("\n2010-05-01 ");

while (true) {
    while(src.hasNext()){
    System.out.println("[ " + src.next() + " ]");
    }
}

Не походит на следующий Сканер (), или hasNext () обнаруживает новые записи в файл.

Любая идея, как еще я могу реализовать, в основном, хвост-f с пользовательским разделителем.


хорошо - использование Kelly сообщает, что я проверяю и обновляю сканер, это работает. Спасибо!!

если у кого-либо есть предложения улучшения, сделайте!

File inputFile = new File("C:/test.txt");
InputStream is = new FileInputStream(inputFile);
InputStream bis = new BufferedInputStream(is);
//bis.skip(inputFile.length());
Scanner src = new Scanner(bis);
src.useDelimiter("\n2010-05-01 ");

while (true) {
    while(src.hasNext()){
    System.out.println("[ " + src.next() + " ]");
    }

    Thread.sleep(50);
    if(bis.available() > 0){
    src = new Scanner(bis);
    src.useDelimiter("\n2010-05-01 ");
    }
}
6
задан skaffman 15 May 2011 в 12:44
поделиться

1 ответ

Я бы предположил, что сканер разбирает bis, который буферизируется, но буфер никогда не обновляется. Возможно, вы полагаетесь на BufferedInputStream или Scanner, чтобы продолжать читать байты из потока, но я думаю, что вы должны делать это сами.

Из Javadocs:

BufferedInputStream добавляет функциональность к другому входному потоку - а именно, возможность буферизации входные данные и поддерживать методы mark и методы сброса. Когда BufferedInputStream создается создается внутренний буферный массив. По мере того, как байты из потока считываются или пропускаются, внутренний буфер пополняется по мере необходимости из содержащегося входного потока, по много байтов за за раз. Операция отметки запоминает точку во входном потоке, а операция операция сброса приводит к тому, что все байты прочитанные с момента последней операции отметки перечитываются, прежде чем новые байты берутся из содержащегося входного потока.

1
ответ дан 17 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: