0

我的程序需要复制位于 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 男人!

4

1 回答 1

0

答案可能是您使用的是缓存而不是内部存储器。不保证缓存。

于 2012-07-08T19:41:19.287 回答