Nächstes Tool: Tail in Java


Tja, schon wieder ein neues kleines Tool: Ich hab gerade tail in Java nachgebaut. Für alle, die unter Windows sowasähnliches suchen. ;-) Den Quelltext gibt es im vollständigen Artikel oder unter http://wikihost.org/wikis/kopis/programm/gebo.prg?name=prog:tail.java

Als nächstes sind noch das Einlesen von STDIN geplant und die Angabe der auszugebenden Bytes per Parameter. Vorschläge bitte wieder in die Kommentare. :-)

<!–more–>

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;

public class Tail {

        /**
         * Application version.
         */
        private static final String VERSION =&quot;0.1";

        /**
         * Default number of bytes to show.
         */
        private static final int DEFAULT_LENGTH = 100;

        public static void tail(String filename) throws IOException {
                File f = new File(filename);
                if(!f.exists()) throw new FileNotFoundException();

                RandomAccessFile file = new RandomAccessFile(f,&quot;r");
                if(file.length()&gt; DEFAULT_LENGTH) {
                        file.seek(file.length() - DEFAULT_LENGTH);
                }
                //go back to last n
                long newPos = file.getFilePointer();
                while(file.read() != 'n') {
                        file.seek(newPos);
                        newPos = file.getFilePointer() - 1;
                }
                // display file
                ByteBuffer buf = ByteBuffer.allocate(DEFAULT_LENGTH * 2);
                int length = -1;
                while((length = file.getChannel().read(buf)) != -1) {
                        System.out.print(new String(buf.array()).trim());
                }
        }

        public static void main(String[] args) {
                if(args.length == 0) {
                        System.out.println("tail v" + VERSION);
                        System.out.println("USAGE:ttail&quot;);
                } else {
                        try {
                                Tail.tail(args[0]);
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
        }

}

Weitere Artikel

Nach den Crossfit Open

Crossfit Open WOD 17.5

Crossfit Open WOD 17.4

Crossfit Open WOD 17.3

Crossfit Open Workout 17.2

Crossfit Open Workout 17.1

Run Feedbin in your local Kubernetes cluster

Running Threema Web in Docker

Neues Workout Video

Diät Update #1