私は Android 用のメディア ファイル編成プログラムに取り組んでおり、メディア ファイルを root/Artist/Album/Song.flac などのディレクトリ構造に移動したいと考えています。この情報を含むデータ構造をループし、mkdirs() を使用してフォルダーを作成しています。作成したフォルダを (OI File Manager または File Expert を使用して) 参照すると、第 1 レベルのディレクトリに入り、第 2 レベルのディレクトリの名前を確認できますが、それらは 0 バイトのファイルとして示されます。最初は本当に単なるファイルだと思って再試行しましたが、ADB でそれらを参照すると、それらはファイルです。権限が問題です:
たとえば、ルートは /mnt/storage/FLAC にあります。
ls -l
drwxrw-rw- 4 app_63 app_63 16 Dec 3 20:42 Artist_1
drwxrw-rw- 3 app_63 app_63 16 Dec 3 20:42 Artist_2
...
2 番目のレベルのディレクトリ (/mnt/storage/FLAC/Artist_1 など) には、Album フォルダーに対する同じ権限があります。
chmod を使用してアクセス許可を手動で編集し、両方のレベル フォルダーを drwxrwxrwx (777) に設定すると、それらに移動して、ファイル マネージャーでファイルを再生できます。これは、chmod +x で実行できます。
私が使用しているコードは次のとおりです。
public void organizeFiles(String rootDir, ArrayList<libraryElementArtist> libraryData)
{
for(int i = 0; i < libraryData.size(); i++)
{
//create artist folder
//{
// (new File(rootDir + File.separator + libraryData.get(i).name)).mkdirs();
//}
for(int j = 0; j < libraryData.get(i).albums.size(); j++)
{
//create album folder
(new File(rootDir + File.separator + libraryData.get(i).name + File.separator + libraryData.get(i).albums.get(j).name + File.separator)).mkdirs();
for(int k = 0; k < libraryData.get(i).albums.get(j).songs.size(); k++)
{
//move song into folder
FileOperations.moveFile(libraryData.get(i).albums.get(j).songs.get(k).filename, rootDir + "/" + libraryData.get(i).name + "/" + libraryData.get(i).albums.get(j).name);
}
}
}
}
これは moveFile 関数です。
public static boolean moveFile(String sourcefile, String dest)
{
File file = new File(sourcefile);
File dir = new File(dest);
return file.renameTo(new File(dir, file.getName()));
}
マニフェスト ファイルに次の行があります。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
私のデバイスのストレージは16GBの内部ext3です。このアクセス許可の修正をコードにどのように追加すればよいですか?