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();
…ないらしい。見つけられなかっただけか?