プログラムを書くにあたりファイルを利用する場面は多いと思いますJavaのFileクラスにはファイルの情報を取得したりファイルを操作するメソッドが実装されています。順に見てみることにします。
インスタンスを作る
インスタンスを作るにはパスを指定してFileクラスのコンストラクタを呼びます。このときファイルは存在してもしていなくても構いません。また実ファイルでなくてもディレクトリでも構いません。
//ファイルパスを指定してコンストラクタを呼ぶ File myfile = new File("/Users/myaccount/mywork/file_a.txt");
//ディレクトリを指定してコンストラクタを呼ぶ File mydir = new File("/Users/myaccount/mywork");
ファイルが存在しているかを確認する
existsメソッドを呼ぶことによってそのファイルまたはディレクトリが存在するかを知ることができます。戻り値はbooleanなのでif文で分岐させると処理が作りやすいでしょう。
File myfile = new File("/Users/myaccount/mywork/file_a.txt"); if(myfile.exists()){ System.out.println(myfile.getAbsolutePath() + "は存在します。"); }else{ System.out.println(myfile.getAbsolutePath() + "は存在しません。"); }
上で使っているgetAbsolutePathメソッドはファイルの絶対パスを文字列で返すものです。
ファイルかディレクトリであるかを確認する
そのインスタンスで示されるファイルやディレクトリが存在するかを調べる時にはisDirectoryメソッドやisFileメソッドを使います。これらもbooleanを返すので分岐に使うことができます。
File myfile = new File("/Users/myaccount/mywork/file_a.txt"); if(myfile.isDirectory()){ System.out.println(myfile.getAbsolutePath() + "はディレクトリです。"); }else{ System.out.println(myfile.getAbsolutePath() + "はディレクトリではありません。"); } if(myfile.isFile()){ System.out.println(myfile.getAbsolutePath() + "はファイルです。"); }else{ System.out.println(myfile.getAbsolutePath() + "はファイルではありません。"); }
これらはファイルが存在することを確認してから利用するようにしてください。存在しない場合は両方ともfalseを返すため誤った理解をする可能性があります。
最新更新時間を取得する
コンピュータにはシステム時間という考え方があります。Javaでのシステム時間は1970年1月1日0時0分0秒GMT(グリニッジ標準時)からの経過時間です。通常は1秒の1000分の1であるミリ秒(ms)単位で計測されます。これを元に人が読めるような年月日や時分秒を使った時間表示にすることは可能ですがこれは別の機会に書くようにします。
ファイルの最終更新時間を取得するには以下のようにlastModifiedメソッドを呼びます。戻りはlongでシステム時間のミリ秒となります。更新した時間が遅いほどこの値は大きくなります。
long lastmodified = myfile.lastModified();
ファイルサイズを取得する
ファイルのサイズを取得するにはlengthメソッドを使います。バイト数をlong値で戻します。存在しないファイルを指定すると0が戻ります。
long length = myfile.length(); System.out.println(myfile.getAbsolutePath() + "のサイズは" + length + "バイトです。");
またディレクトリを指定するとどのような値が戻るかは環境次第です。これはJavaの言語仕様で定めがないために実装がOSごとに違っているためです。使えなくはないのですがバージョンアップで実装内容が変わってしまうこともあり得ますし避けた方が無難です。