Android には、データをデバイスに永続的に保存するための多くのオプションが用意されています。内部ストレージを選択したので、SD カードに保存することを提案しないでください。(内部ストレージに関する質問には、SD カードに関する回答がたくさんあります!!)
アプリケーションの内部ストレージ ディレクトリにサブディレクトリを作成したいと考えています。私はこの SO answerに従って、以下に再現しました。
File mydir = context.getDir("mydir", Context.MODE_PRIVATE); //Creating an internal dir;
File fileWithinMyDir = new File(mydir, "myfile"); //Getting a file within the dir.
FileOutputStream out = new FileOutputStream(fileWithinMyDir); //Use the stream as usual to write into the file.
残念ながら、それは「app_」プレフィックスを持つサブディレクトリを作成しています。したがって、例から、サブディレクトリは "app_mydir" のようになります (理想的ではありません)。
このSOの質問に対する答えは、この方法で「app_」プレフィックスを取り除くことができることを示唆しています:
m_applicationDir = new File(this.getFilesDir() + "");
m_picturesDir = new File(m_applicationDir + "/mydir");
しかし、/data/data/com.mypackages/files/mydir/the.zip のような場所に zip を書きたいと思っています。
したがって、最終的に、私のコードは次のようになります。
File appDir = new File(getApplicationContext().getFilesDir() + "");
File subDir = new File(appDir + "/subDir");
File outFile = new File(subDir, "/creative.zip");
しかし、これを試してみると、「ファイルが存在しません」という別のエラーが発生しています。
FileOutputStream fileStream = new FileOutputStream(outFile);
(1)「app_」プレフィックスなしでサブディレクトリを作成し、(2)それにzipを書き込むにはどうすればよいですか?
また、私の最初の要求が合理的でない場合は、コメントで理由を教えてください! 「app_」プレフィックスには、atm をエスケープする意味があると確信しています。