2011-06-18 33 views
0

我正在使用java tail-listener api來監視來自給定輸入日誌文件的日誌消息。以下是我的代碼。在java中,如果輸入文件未找到,如何停止tailer線程

public static void main(String[] args) { 
if (listOfFiles[i].isFile()) 
{ 
files = listOfFiles[i].getName(); 
File pcounter_log = new File(files);         
Tailer logMessages = new Tailer(pcounter_log, new FileListener(files,element.getLogPattern()), 
             5000, true); 
Thread thread = new Thread(logMessages); 
    thread.start(); 

} 

public class FileListener extends TailerListenerAdapter { 

private final String fileName; 

public FileListener(String fileName, ArrayList<String> pattern) { 
    this.fileName = fileName; 
} 
    public void handle(String line) { 

    System.out.println(fileName+"<---->"+line); 
    } 
} 

在上面的代碼中,如果在執行過程中沒有找到任何文件,如何停止相應的尾部。

如何做到這一點。

回答

0

使用File.exists()

if(pcounter_log.exists()) { 
     Tailer logMessages = new Tailer(pcounter_log, new FileListener(files,element.getLogPattern()), 
             5000, true); 
     Thread thread = new Thread(logMessages); 
     thread.start(); 
} 
+0

如果文件在執行過程中被刪除,如何處理這個 – WithIssue

+0

@WithIssue:如果你在窗口操作系統中運行它,OS不會讓你刪除它,而在* nix的情況下,inode仍然是available.so你可以繼續閱讀。 –

+0

@John:我在linux.in linux中運行這個,我們可以強制刪除。 – WithIssue

0

...如果任何文件時,就不會執行,如何停止相應的零售商的中間找到。

最根本的問題是當您嘗試打開文件時「找到」文件。一旦它被打開,Java應用程序並不需要再次找到它:

  • 在Windows,OS級文件鎖定意味着文件通常不能被刪除(例如,通過其他應用程序),直到你的應用程序關閉它。

  • 在UNIX/Linux上,文件可以在打開時被刪除(實際上是「未鏈接」),但這不會影響當前打開該文件的應用程序。應用程序可以繼續讀取和寫入未鏈接的文件...即使沒有其他應用程序可以打開它。

使用Java 6,判斷當前正在讀取/寫入的文件是否已被「刪除」的唯一方法是嘗試再次打開它。如果你反覆做這些,這很昂貴。在Java 7中,有用於處理文件系統事件的新類,它們可以讓應用程序「注意」文件已被刪除/取消關聯。