ファイルを書き出す時にすでにディレクトリがあればよいのですが無い場合に手動で作るのは面倒です。今回は指定のディレクトリのパスの通りにディレクトリを作成してファイルを書き出すプログラムを作ります。
ディレクトリの記述方法
自分のアカウントをmyaccountとするとホームディレクトリは以下のようになります。myaccount部分は適宜読み替えてください。
Mac | /Users/myaccount |
---|---|
Windows | C:\Users\myaccount または C:¥Users¥myaccount |
Windowsでのパス区切り文字はバックスラッシュであったり半角円マークであったりします。これは日本語の文字コードで長い事バックスラッシュに当たる文字を円マークに当てていたために起こっている現象です。Javaで文字列として扱う時にはこの文字はエスケープする必要があります。エスケープ記号もバックスラッシュなので
String home = "C:\\Users\\myaccount";
とか
String home = "C:¥¥Users¥¥myaccount";
のようになります。ここでは複雑になるので通常のスラッシュを使います。Javaの中ではWindowsシステムでも
String home = "C:/Users/myaccount";
のように書いて問題ありません。
Fileクラスを利用する
java.io.Fileというクラスはシステム上のファイルをオブジェクトとして扱うことができます。ここでいうパスで示されるものが対象なので実際のファイルの他にディレクトリもこのクラスで表現することができます。
今回は自分のホームディレクトリに”mywork”という名前のディレクトリを作ります。パスはMac用にしていますがWindowsはドライブ名をつけるなど適宜読み替えてください。
File mywork = new File("/Users/myaccount/mywork");
パスが存在しなくてもインスタンスは作ることができます。実際にこのパスが存在するかはexistsメソッドで調べることができます。
if(mywork.exists()){ System.out.println(mywork.getAbsolutePath() + "は存在します。"); }else{ System.out.println(mywork.getAbsolutePath() + "は存在しません。"); }
getAbsolutePathメソッドはこのインスタンスのフルパスを返すので情報を表示する時に使えます。myworkはまだ作成していないのでelseの処理に入り
/Users/minaberger/myworkは存在しません。
となるはずです。
ではディレクトリを作ります、
mywork.mkdir();
これでディレクトリが作成されたはずです。ファインダーやエクスプローラーで確認してください。
このmkdirメソッドは一階層しか作成しません。もっと何階層も深いディレクトリを作るにはmkdirsメソッドを使ってください。
File mydir = new File("/Users/myaccount/1/2/3/4/5/6/7/8/9/"); mydir.mkdirs();
ファイルを書き出す前にディレクトリを作る
ファイルを書き出すメソッドを以前作りましたがそのディレクトリがないと書き出し時にエラーとなってしまいます。例えば
/Users/myaccount/1/2/3/4/5/6/7/8/9/myfile.txt
というファイルに新規にテキストを書き出すにはその前に
/Users/myaccount/1/2/3/4/5/6/7/8/9
というディレクトリが存在しなくてはなりません。この場合
- myfile.txtのFileインスタンスを作る。
- そのファイルの存在するディレクトリ(親ディレクトリ)のFIleオブジェクトを取得する。
- 親ディレクトリを作成する。
- ファイルを書き出す。
という順序で処理を行います。最後のファイルの書き出しは以前作ったメソッドを利用するとして今回はディレクトリの作成までコードを書きます。
File myfile = new File("/Users/minaberger/1/2/3/4/5/6/7/8/9/myfile.txt"); File parent = myfile.getParentFile(); parent.mkdirs();
myfileにたいしてmkdirsメソッドを呼び出すとmyfile.txtという名前のディレクトリまで作成されてしまいます。このためmyfile.txtが配置されるべきディレクトリをgetParentFileメソッドを使って取得する必要があります。あとはmkdirsメソッドでディレクトリを作成します。