package jtail; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; public class JTail { private static final long SLEEP_TIME = 500L; public static void open(File file) { RandomAccessFile raf = null; long lastFilePointer = 0; try { raf = new RandomAccessFile(file, "r"); while (true) { if (raf.length() == lastFilePointer) { // Don't forget to close the previous file handle raf.close(); Thread.sleep(SLEEP_TIME); // Wait till the file exists before opening it while (!file.exists()) {} raf = new RandomAccessFile(file, "r"); raf.seek(lastFilePointer); } else { byte[] bytes = new byte[4096]; int bytesRead; while ((bytesRead = raf.read(bytes, 0, bytes.length)) != -1) { System.out.print(new String(bytes, 0, bytesRead)); } lastFilePointer = raf.getFilePointer(); } } } catch (Exception e) { e.printStackTrace(); } finally { if (raf != null) { try { raf.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static void printUsage() { System.out.println("Usage: java -cp <classpath> " + JTail.class.getName() + " <file>"); } private static boolean validateArgs(String[] args) { if (args.length != 1) { printUsage(); return false; } File file = new File(args[0]); if (!file.isFile()) { System.err.println("Error: " + file.getAbsolutePath() + " does not exist or is not a file"); return false; } return true; } public static void main(String[] args) { if (!validateArgs(args)) { System.exit(1); } JTail.open(new File(args[0])); } }
Monday, December 3, 2012
How to Implement tail -f in Java
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment