私のプログラムは、SDカードのフォルダーにある2つのファイル(.oggサウンドファイル)を、getCacheDir()を介して返されるアプリケーションのキャッシュディレクトリにコピーする必要があります。
次のコードを使用してファイルをコピーします
File cache=this.getCacheDir();
cache.mkdirs();
fout=new FileOutputStream(cache.getAbsolutePath()+"/file1.ogg");
fin=new FileInputStream(Environment.getExternalStorageDirector+"/imported/file1.ogg");
byte[] buf = new byte[128];
int len;
while ((len = fin.read(buf,0,128))>-1){
fout.write(buf, 0, len);
}
fout.close();
fin.close();
コードはエラーなしでコンパイルおよび実行され、両方のファイルがコピーされ、元のファイルと同じサイズになりますが、プログラムがそれらの.oggファイルを再生しようとすると、コピーされたファイルをPCで再生しようとするとIO例外が発生します。エラーが発生します。
ただし、SDカードのあるフォルダから別のフォルダにコピーすると正常に再生されます。つまり、外部メディアから外部メディアへのコピーは問題ありませんが、外部メディアから内部メディアへのコピーは破損の原因になります。
編集
これが私の実験と観察から私が見つけたものです:
A)元のファイルをプログラムで内部ストレージにコピーする->ファイルの再生に失敗する
B)元のファイルを内部ストレージに直接コピーする(rootアクセス権があります)->正常に再生されます
C)プログラムでコピーされたファイルをSDカード内の任意の場所に直接コピーして戻す->再び正常に再生されます(驚くべきことです!)
注:-ここで直接コピーするということは、AndroidOSからのコピーアンドペーストを使用することを意味します
私の感覚では、コピーしたファイルはコピーした直後には機能しませんが、SDカードに移動すると再び機能し始めます。
FTWマン!