業務でテキストファイルを読み込んで、別形式に変換して出力みたいなアプリを作ったときにファイルオブジェクトについていろいろ調べたんでまとめておきます。
Contents
ファイルオブジェクトとは?
Javaでファイルパスを与えることでインスタンス生成できます。そのパスが存在しているのか、ファイルなのか、ディレクトリなのか、ディレクトリなら同階層にどんなファイルがあるかなど様々なことが調べられてかなり使えます。
PHPよりこういうライブラリが充実しているのがありがたいところ。
正式なAPIはこちら
まずインスタンスですが以下のようにして生成できます。
File オブジェクト名 = new File(ファイル名);
頻出メソッド
上記でリンクを張ったAPIからのコピペですが、網羅するよりは頻度的に集めたほうが役に立つと思うのでリスト化します。
パスが存在しているか
boolean |
exists()
この抽象パス名が示すファイルまたはディレクトリが存在するかどうかを判定します。
|
パスの取得
String |
getPath()
この抽象パス名をパス名文字列に変換します。
|
ファイルか、ディレクトリかの判定
boolean |
isDirectory()
この抽象パス名が示すファイルがディレクトリであるかどうかを判定します。
|
boolean |
isFile()
この抽象パス名が示すファイルが普通のファイルかどうかを判定します。
|
ある階層のファイルを全取得
File[] |
listFiles()
この抽象パス名が示すディレクトリ内のファイルを示す抽象パス名の配列を返します。
|
匿名クラスで展開とかすると拡張子の選択とかできるんですが、再起処理が難しかったのでつかいません。
ちなみに以下が自分の作ったサンプル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/** * 起点となるディレクトリから再帰的にファイルを検索し、 * 該当する拡張子のものを出力 * @param fileDir 起点のファイルパス */ public void setFileList(File fileDir){ File files[] = fileDir.listFiles(); //ファイルパス String filePath; try{ for (File file:files){ //再起処理もかねる if ( file.exists()){ if (file.isDirectory()){ //ディレクトリだったら再起 setFileList(file); }else if ( file.isFile()){ //ファイルパスから拡張子を取得するメソッド String extension = getExteinsionFromFilePath(file); //拡張子がターゲット対象かどうかを判定するメソッド if ( isExtensionList(extension) ){ //ファイル取得 filePath = file.getPath(); System.out.print(filePath); } } } } } catch ( NullPointerException e){ Logger.getLogger(FileIO.class.getName()).log(Level.SEVERE, null, e); } } |
これはかなり汎用的で今後も使いそうな感じです。
ディレクトリ作成
boolean |
mkdir()
この抽象パス名が示すディレクトリを生成します。
|
boolean |
mkdirs()
この抽象パス名が示すディレクトリを生成します。存在していないが必要な親ディレクトリも一緒に作成されます。
|
下のメソッドはC:\aaa\bbb\cccc\ddd.txtというパスにファイルを保存したいときに、bbbとcccがなければ一気に作ってくれます。
これないと大変ですね・・・
1 2 3 4 5 6 |
//親ディレクトリのパスを取得 File parentDir = new File( ディレクトリパス ); //ディレクトリが存在していなければ作成 if( !parentDir.exists() ){ parentDir.mkdirs(); } |