プログラム悪戦苦闘日記

はてなダイアリーからの移行(遺物)

java.ioの周辺 ファイル操作関連

 
 Java Tips系ページでは、I/Oのやり方は説明されているが、ディレクトリ操作などがあまり書かれていない。そのため、これについてまとめておく。

  • ファイルサイズの取得は?

java.io.File#length() を使う。ファイルが存在しない場合は 0Lを返す、とあるからサイズ 0と区別がつかないらしい。

java.io.File#exists() を使う。

  • 指定されたパス名がファイルであるかどうかを調べるには?

java.io.File#isFile() でファイルであるかを調べられる。シンボリックリンクも対象にするかは不明。

java.io.File#isDirectory() でディレクトリであるかを調べられる。

  • ファイルやディレクトリの最終更新日付を取得するには?

java.io.File#lastModified() を使う。戻り値はlong値なので YYYY/MM/DD みたいな文字列にしたいときは、この値を java.util.Date に喰わせる。

java.io.File#delete() で削除できる。しかしディレクトリの場合は中が空でなければならない。中身ごと消すには、一旦中身を消す必要がある。

java.io.File#list() を使う。パス名がディレクトリでないときは null を返す。文字列でなくて抽象パス名が欲しいときは java.io.File#listFiles() を使う。

java.io.File#mkdir() を使う。このパスの親ディレクトリも一括で生成したいときは java.io.File#mkdirs() を使う。

java.io.File#renameTo() を使う。

  • ファイルをコピーするには?

残念ながらcopyみたいなメソッドは存在しない。FileInputStream / FileOutputStream を使ってもいいが、チャネルを使うほうが簡単だ。次のはhoge.txtをpiyo.txtにコピーする例だ。

FileChannel src = new FileInputStream("hoge.txt").getChannel();
FileChannel dst = new FileOutputStream("piyo.txt").getChannel();

src.transferTo(0, src.size(), dst);

dst.close();
src.close();

…ないらしい。見つけられなかっただけか?