web-dev-qa-db-ja.com

Androidアプリケーションのインストール時に内部ストレージにディレクトリを作成する方法は?

必要なすべてのリソースを格納する単一のフォルダーを作成し、それを内部ストレージに配置します。このディレクトリは1回だけ作成したいので、アプリケーションのメインアクティビティで作成する必要があることがわかりました。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    File directory = context.getDir("mydir", Context.MODE_PRIVATE);
    Log.d("directory", directory.getAbsolutePath().toString());
} 

これはインターネットで見つけたものなので問題ないようですが、大量のエラーが表示され、ディレクトリパスのログにアクセスできて、アプリケーションが起動しません。なぜだと思いますか?

また、Eclipseから携帯電話にアプリケーションを実行するたびに内部ストレージを使用する場合、以前のアプリケーションがリソースとともに自動的に削除されますか、それとも手動で行う必要がありますか?

15
Andrey

getCacheDir()を使用します。ファイルシステム上のアプリケーション固有のキャッシュディレクトリへの絶対パスを返します。次に、ディレクトリを作成できます

File myDir = new File(getCacheDir(), "folder");
myDir.mkdir();
16
Blackbelt

代わりに外部ストレージSDカードに保存する場合は、これが必要です

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

AndroidManifest.xmlファイル内

また、これはストレージを操作するためのものです:

File direct = new File(Environment.getExternalStorageDirectory()+"/folder");

if(!direct.exists()) {
     if(direct.mkdir()); //directory is created;
}
7
Andy Davies

まず、アプリケーションで使用できるさまざまなストレージオプションをよく読んで理解してください。グーグルはここに主題に関する非常に良い記事を持っています:

http://developer.Android.com/guide/topics/data/data-storage.html

上記のAndyからの回答では、SDカードなどに書き込むためのEnvironment.getExternalStorageDirectory()(APIレベル7)について言及していますが、その場所に書き込まれたファイルは、ユーザーがアプリをアンインストールしても削除されないことに注意してください。 ドキュメント はこう言っています:

「アプリケーションは、ユーザーのルート名前空間の汚染を避けるために、この最上位ディレクトリを直接使用しないでください。」

代わりに、APIレベル8以上を対象とする場合は、Context.getExternalCacheDir()を使用する必要があります。その場所にあるファイルは、アプリをアンインストールすると削除されるためです。アンインストール後もファイルを存続させたい場合は、Context.getExternalFilesDir()を使用してください。内部ストレージ上のファイルを操作するためのgetCacheDir()およびgetFilesDir()もあります。

あなたの質問へのコメントで述べたように、私たちがあなたを助けることができるように、あなたは本当にここにエラーを投稿するべきです。

PS私はSOで質問に答えるのが初めてなので、私の答えで言及されているすべての機能へのリンクを投稿するのに十分な担当者がいないため、以前の投稿にコメントできないようです。

5
britzl
<uses-permission Android:name="Android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

File newfile = new File(Environment.getExternalStorageDirectory()+"/specifyfoldername","nestedfoldername");
    direct.mkdir();
// it will create two folder in your internal storage first is specifyfoldername and another one inside the mentioned folder which is nestedfoldername
    }
0
Shashwat Gupta

私はBlackbeltの回答は良いと思いますが、内部キャッシュに保存したくありませんでした(私が作成しようとしていた仕様では、その方法で消去され、頻繁に書き込まれます)。

String path = "";


その後

if (path.isEmpty()) {
        File file = new File(this.getFilesDir(), "my_dir_identfiying_name/");
        path = file.getAbsolutePath();
        Log.d("PATH", path);
    }
0
sivi

Androidスタジオ特定のフォルダにビデオをダウンロード:

  <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />          

  String path = Environment.getDataDirectory().getAbsolutePath().toString() + "/storage/emulated/0/appFolder";
  File mFolder = new File(path);
  if (!mFolder.exists()) {
      mFolder.mkdir();
  }
  File Directory = new File("/sdcard/kaizzan/");
  Directory.mkdirs();
0