4

/mnt/sdcard の外部 SD に書き込もうとはしていません。5 つのアプリ ファイル用のフォルダーを作成し、他のユーザーがアクセスできるようにしようとしています。

データをエクスポートするときに .csv ファイルを生成する Libra というアプリがあり、すべてが /Libra/ フォルダーに移動します。アプリで同じことをしたい。

私が見た限りでは、sd である外部ストレージと、アプリの非公開の場所である内部ストレージがあります。

LibraのようにAndroidファイルシステムのルートにディレクトリを作成するにはどうすればよいですか?

外部ストレージを要求すると、次の望ましくない場所が表示されます。

Environment.getExternalStorageDirectory()
/storage/emulated/0/ (in my Nexus)
/mnt/sdcard          (in the emulator)

絶対パス /MyDiary にフォルダーを作成しようとすると、フォルダーの作成中にエラーが返されます

File folder = new File("/MyDiary");
boolean success = true;
if (!folder.exists()) {
        success = folder.mkdir();
}
if (success) {
        Toast.makeText(getBaseContext(), "Already exists", Toast.LENGTH_LONG).show();
} else {
        Toast.makeText(getBaseContext(), "Error creating directory", Toast.LENGTH_LONG).show();
        return;
}

Libra フォルダーが存在するかどうかを確認しようとすると、存在しないと表示されます。

File folder = new File("/Libra");
boolean success = true;
if (!folder.exists()) {
        success = folder.mkdir();
}
if (success) {
        Toast.makeText(getBaseContext(), "Libra exists", Toast.LENGTH_LONG).show();
}

注: 外部ストレージに書き込むためのマニフェスト アクセス許可があります。

4

4 に答える 4

3

ルートは RAM ディスクです。そして、その中のいくつかのフォルダーは、init.rc によって作成されます。init.rc のみが、ramdisk にフォルダーを作成する権限を持っています。init.rc でフォルダーを作成する場合でも、新しいフォルダーに実際のストレージ デバイスをマウントするには、init.rc のヘルプが必要です。

再起動時に init.rc ファイルが再生成されるように再パックします

于 2014-04-11T03:17:16.330 に答える
0

Android OS でファイルを作成するのは正しい方法ではないと思います。http://developer.android.com/training/basics/data-storage/files.htmlから:

公開ファイルを外部ストレージに保存したい場合 [あなたのアドバイスを読みましたが、それが必要な場合は、この方法で複数のアプリからファイルにアクセスできると思います]、 getExternalStoragePublicDirectory() メソッドを使用して File を表す外部ストレージの適切なディレクトリ。このメソッドは、DIRECTORY_MUSIC や DIRECTORY_PICTURES などの他のパブリック ファイルと論理的に整理できるように、保存するファイルの種類を指定する引数を取ります。例えば:

public File getAlbumStorageDir(String albumName) {
    // Get the directory for the user's public pictures directory. 
    File file = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, "Directory not created");
    }
    return file;
}
于 2013-03-23T13:53:35.940 に答える
0

最初にアプリへのスーパーユーザー権限を取得してみてください。データを書き込むフォルダーとファイルを作成するためのLinuxコマンドを実行します(Linuxコマンドのみでこれを行うことができます)。アプリの最初の実行時だけです。次に、ファイルにデータを書き込むことができますFileOutputStream("filename") オブジェクトを取得しています。機能したかどうかについてはコメントを残してください。上記の手順の部分的なコードは

    Process p=Runtime.getRuntime().exec("su");
    OutputStream o=p.getOutputStream();
    o.write("mkdir foldername\n".getBytes());
    o.write("cd foldername\n".getBytes());
    o.write("cat > filename\n".getBytes());
    o.write("exit\n".getBytes());
    o.flush();
    p.waitFor();
于 2013-03-23T17:45:32.573 に答える