右脳系エンジニアのブログ

エンジニアとしての生き方のプロトタイピング、新しい社会のプロトタイプづくりをしています。

メモ:ファイルを途中から操作するときはRandomAccessFileを使うといい

Javaファイルの更新分を取得する処理を描けないかな~と思い調べていた所 RandomAccessFileというものがあることがわかったので実装してみた。

InputStreamで読み込むと頭からreadline()して該当の行までいかないといけない。

RandomAccessFileは seek(long pointer)を利用することで 途中から読み込みをすることできる。

なので、更新分をとるために * 前回のポインタを取得 * seek()でポインタに移動 * readline()で読み込み * 最後まで終わったらlength()で今の最後尾ポインタを保持しておく

サンプルコード


    private long pointer;
    public void execute(File inFile) {
        RandomAccessFile raf;

        try {
            raf = new RandomAccessFile(inFile, "r");
            // なにかしらの方法でしーくするポインタを保持

            raf.seek(pointer);
            String line;

            // ログのヘッダーデータを作成
            Log log = null;

            while *1 != null) {
                    System.out.println(line);
                }
            }

            // ポインタをセット
            this.pointer= raf.length();

            raf.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

*1:line = raf.readLine(