0

タイトルの通り、Androidでフォルダを作成しようとしていますが、スラッシュがすべて削除されています。

背景情報について詳しく

は、具体的には、アプリケーションのユーザーのファイルを保存するディレクトリを作成しようとしています。これらのファイルは、アプリケーションが完全なファイル管理をサポートしていないため、ファイル マネージャー (File Manager HD など) からユーザーがアクセスできる必要があります。API レベル 8+ の標準を使用して、公的にアクセス可能なフォルダーのルートをEnvironment.getExternalStoragePublicDirectory(). 次に、 DCIM > Sketchbook > [スケッチの名前] にあるフォルダーを作成しようとしますFile.mkdirs()。詳細については、以下のコードを参照してください。

私はすでに持っています:

  • SDカードがマウントされ、読み取り可能で、書き込み可能であることを確認するためにチェック
  • 権限を有効にしましたWRITE_EXTERNAL_STORAGE
  • File.mkdir()フォルダーの場所までの階層内のすべてのファイルに対して使用してみました
  • /\\File.separatorChar、およびFile.separatorをフォルダー区切り文字として 使用してみました

コード:

boolean success = true;

//The public directory
File publicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
//The location of the sketchbook
File sketchbookLoc = new File(publicDir + "Sketchbook" + File.separator);
//The location of the sketch
//getGlobalState().getSketchName() returns the name of the sketch: "sketch"
File sketchLoc = new File(sketchbookLoc + getGlobalState().getSketchName() + File.separator);

if(!sketchLoc.mkdirs()) success = false;

//Notify the user of whether or not the sketch has been saved properly
if(success)
    ((TextView) findViewById(R.id.message)).setText(getResources().getText(R.string.sketch_saved));
else
    ((TextView) findViewById(R.id.message)).setText(getResources().getText(R.string.sketch_save_failure));


前述のテスト (実際に機能したもの) のさまざまな化身で、一貫した結果を受け取りました。階層的な親である必要があるすべてのフォルダーの組み合わせに対応する名前の新しいフォルダーを DCIM に取得します。つまり、新しいディレクトリを作成しましたが、すべてのフォルダ セパレータがそこから削除されています。

今、私はあなたに尋ねます:

  • ユーザーデータを正しい場所に保存しようとしていますか? これを行うべき別の方法はありますか?
  • DCIM フォルダに新しいフォルダを作成することはできますか? Androidはそれを防ぎますか?
  • この問題は私に固有のものですか? 他の誰かが DCIM フォルダーにフォルダーを作成できますか?
  • 正しいフォルダー セパレーターを使用していますか?
  • 私が絶対に、完全に、そして完全に欠けているものは他にありますか?

入力が終わり、私の (長すぎる) 質問を読み終わったので、なんらかの答えを見つけられることを願っています。明確化または詳細情報が必要な場合は、その旨をお伝えください。

編集: 作成されたフォルダーの例は「DCIMSketchbooksketch」で、「DCIM/Sketchbook/sketch」である必要があります。

4

1 に答える 1

1

使用しないでください

File sketchbookLoc = new File(publicDir + "Sketchbook" + File.separator);

しかし

File sketchbookLoc = new File(publicDir , "Sketchbook");

publicDir.toString() はファイルセパレーターで終了しないためです (そのように宣言したとしても)。toString() は、ファイルの正規名を提供します。


したがって、ソースは次のようになります。

//The location of the sketchbook
File sketchbookLoc = new File(publicDir , "Sketchbook" );
//The location of the sketch
File sketchLoc = new File(sketchbookLoc , getGlobalState().getSketchName() );
于 2012-08-30T12:56:25.517 に答える