我的程序需要复制位于 sd 卡文件夹中的两个文件(.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 文件时,当我尝试在我的电脑中播放复制的文件时,也会发生 IO 异常产生错误。
但是,如果我将它们从一个文件夹复制到 SD 卡上的另一个文件夹,它可以正常播放。这意味着从外部媒体复制到外部媒体是可以的,但从外部到内部复制会导致损坏!
编辑
以下是我从实验和观察中发现的:
A) 以编程方式将原始文件复制到内部存储 -> 无法播放文件
B)将原始文件直接复制到内部存储(我有root访问权限)->播放正常
C)将编程复制的文件直接复制回SD卡中的任何位置->再次播放正常(令人惊叹!)
注意:-这里直接复制是指使用 Android OS 的复制粘贴
以我的感觉,复制的文件在复制后无法正常工作,但是一旦将其移至 SD 卡,它就会再次开始工作。
FTW 男人!