ファイル入出力 Bufferedな例

Oracle Technology Network for Java Developers | Oracle Technology Network | Oracleにはこうあります。

一般的に、Reader に対して読み込み要求が出されると、それに対応する基本となる文字型ストリームまたはバイトストリームへの読み込み要求が発行されます。このため、FileReader や InputStreamReader のように read() オペレーションの効率の良くない Reader では、その周りを BufferedReader でラップすることをお勧めします。次に例を示します。

BufferedReader in
= new BufferedReader(new FileReader("foo.in"));

この例は指定されたファイルからの入力をバッファーします。バッファリングせずに read()、readLine() を使うと、呼び出しごとにファイルからバイトを読み込み、文字型に変換し、そのたびに復帰するので、非常に効率が悪くなります。

ちなみにReader,Writerクラスを継承するサブクラス達はBuilderパターンというデザインパターンで設計されています。
参考:http://www.coppermine.jp/hasunuma/weblog/2010/07/java-api---builder.html

続きを読む

ファイル入出力 シンプルな例

以前ファイル入出力について書いてみましたが、かなり適当な内容だったので書きなおそうと思い立ちました。
Javaではいくつか書き方がありますので、シリーズで記事を起こそうと思います。

最初の今回は、「シンプルな例」として、
FileWriter,FileReaderクラスを使った例を紹介します。
Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle
Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle

続きを読む

TextFileListからsvn exportするシェル

SVNでファイルを管理している際に指定したファイルだけをエクスポートしたい場面はたまにある。
毎回必要なファイルにチェックを入れたり、まとめてエクスポートしていらないファイルを消したり、なんてやってられない。

そこで必要なファイルのリストを作っておいて、それを読み込んでエクスポートしちゃうシェルを作った。

続きを読む

不要な名前定義を検索し削除するマクロ

あまり知られてない(?)けど、エクセルを作成したときに意図せず名前定義が設定されることがある。
名前定義にはローカルパスや共有ファイルを触っている場合には共有フォルダのURL(IPアドレス含む)が設定されてしまうことがある。

もしテンプレートをコピーして使用していた場合に、見せたくないパスやIPアドレスが混入してしまう。

そこで、不要と思われる名前定義を一括削除するマクロを作ってみた。
※私はvba門外漢のため取り敢えず動けばOKとした。

vbaでファイルを扱うクラスは複数あるようだが、一番直感的に理解できたFileSystemObjectを使った。
FileSystemObjectはExcel2007くらいからしか使えない?らしいので気をつけて。

続きを読む

負荷テスト時のテスト用ファイルを簡単に作るためのバッチを作る for Windows

今回は負荷テストをしたい場合の大容量ファイルをお手軽に作るバッチを作った。
あらかじめ1Kbyte(1024byte)のファイルを用意していると切りの良いサイズができて少し嬉しい。

とりあえず今回もなんちゃって個人情報を使って1KBのファイルを作る。
1KB.txt

肝心のバッチはこんな感じ

@echo off

for /L %%i IN ( 1, 1, 1000) do (
  type 1KB.txt >> 1MB.txt
)
pause

めっちゃ簡単。Forでループしてるだけで、リダイレクトで1000回追記すると1MBのファイルが出来上がるでしょう。
結果:

ちょんプロとしては使う機会が多いように感じるのはおれだけ?

簡単だけど結構役に立つ、そんなバッチ君です。

BufferedReaderとInputStreamReaderの処理速度

InputStreamReaderのJavaDocにあるBufferedReaderを使ったファイル読込を書いてみた。

    /**
     * BufferedReaderを使ったファイル読込.
     * @param filePath
     * @param charset
     * @return String
     * @throws IOException
     */
    public static String readFileb(String filePath, EncodeCharset charset) throws IOException{
        BufferedReader breader = null;
        try{
            breader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), charset.getValue()));
            StringBuffer sb = new StringBuffer();
            int buf = -1;
            while((buf = breader.read()) != -1){
                sb.append((char)buf);
            }
            return sb.toString();
        }catch (IOException e) {
            LogUtil.error("ファイル読込に失敗", e);
            throw e;
        }finally{
            try{
                if(breader != null){
                    breader.close();
                }
            }catch (IOException e) {
                LogUtil.error("closeに失敗", e);
                throw e;
            }
        }
    }

すごく単純。 InputStreamReaderをBufferedReaderでラップするだけ。

いつか読んだ本にはこのへんのデザインパターンは理解すると凄く分かりやすくなると書かれていた。
中身忘れちゃったけど(笑)

続きを読む