ディレクトリの作り方
アンドロイドではファイルやフォルダの操作にFileクラスを使います。ここではFileクラスを使って1つまたは複数のディレクトリ作成の方法をを紹介します。
基本的な作り方
フォルダを取得する方法にContextクラスでアプリ専用のフォルダを取得する方法があります。たとえば、MyAppというアプリ専用のフォルダ"MyApp_folder"を作りたい場合、次のコードを書きます。
final File topDir = getDir("MyApp_folder", Context.MODE_PRIVATE);
getDirを呼び出したとき、フォルダが存在しなければ自動でフォルダが作られます。また、getDirの2つめの引数のは他のアプリからフォルダを読み込めるかのモードを渡します。
作成がうまいき、DDMSでファイルエクスプローラーを開くと次のようにフォルダが作成されます。
Androidではアプリ直下のディレクトリに限り、名前の先頭に"app_"の文字列がつき、その下のディレクトリはそのままの名前で作成されます。
このフォルダをトップにして配下にフォルダを作る場合は次のようにmkdirメソッドを使います。
public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final File topDir = getDir("MyApp_folder", Context.MODE_PRIVATE); //アプリ専用のディレクトリを作成 //"MyApp_folder"直下にサブディレクトリを作成 File newDir = new File(topDir, "sub_dir"); if(!newDir.exists()){ newDir.mkdir(); } } }
FileコンストラクタにトップディレクトリのFileインスタンスと作りたいフォルダ名を渡すとそのFileインスタンスが返ってきます。
もし、既にファイルが存在していなければexitsメソッドがtrueを返すのでmkdirでコンストラクタに渡したフォルダ名を持つフォルダが作られます。
もちろん、サブフォルダのFileインスタントを渡し、サブフォルダの配下にさらにフォルダを作ることも可能です。
深い階層を持つフォルダをまとめて作成する
1つ以上の階層を持つ"test/data/data1/"のようなディレクトリがあるとします。
このような深い階層を持つディレクトリを一気に作りたい場合には次のようにmkdirsメソッドをFileクラスから呼びます。
public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); File nestDir = new File("/data/data/com.MyApp.myapp/app_MyApp_folder/test/data/data1/"); //絶対パスを指定 if(!nestDir.exists()){ if(nestDir.mkdirs()){ Log.i("MainActivity : ", "フォルダ作成に成功"); }else{ Log.i("MainActivity : ", "フォルダ作成に失敗"); } } } }
また、Fileコンストラクタには絶対パスでディレクトリのアドレスを渡します。
DDMSのファイルエクスプローラーなどを見ると分かりますが、アプリのデータは"data/data/com.XXX.xxx"ディレクトリ以下(XXXとxxxはアプリ名)に格納されています。
DDMSでできたディレクトリを見ると次のように"app_MyApp.myapp"以下にまとめてフォルダが作成されています。