Android 将包含2500个文件的12MB文件夹从资产快速复制到sd卡

Android 将包含2500个文件的12MB文件夹从资产快速复制到sd卡,android,Android,我正在尝试将大量文件夹和子文件夹从我的apk资产文件夹快速复制到我的sd卡。这些文件夹包含12mb的小文件,大概总共2500个。这个问题中的代码示例有效,但在我的设备上需要5分钟以上。有没有更快的方法 我最初尝试将文件夹添加到zip存档中,并在移动到设备上后将其解压缩,但这在不同的设备上造成了许多问题,并且在整个过程中失败了很多。12mb的存储速度应该比使用另一个设备的方法快一点,尝试在copyFile中增加缓冲区大小,如下所示 private void copyFile(InputStream

我正在尝试将大量文件夹和子文件夹从我的apk资产文件夹快速复制到我的sd卡。这些文件夹包含12mb的小文件,大概总共2500个。这个问题中的代码示例有效,但在我的设备上需要5分钟以上。有没有更快的方法


我最初尝试将文件夹添加到zip存档中,并在移动到设备上后将其解压缩,但这在不同的设备上造成了许多问题,并且在整个过程中失败了很多。

12mb的存储速度应该比使用另一个设备的方法快一点,尝试在
copyFile
中增加缓冲区大小,如下所示

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[8192]; // 1024 is kind small,..try 8192 or 4096!!
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}

我创建了一个zip文件,将其放入我的应用程序的原始文件或资产中,并在用户第一次打开应用程序时将其解压缩,取得了非常好、一致的结果。我建议您再尝试一下,因为我对数百次安装都没有问题印象深刻

我基于帮助器方法来压缩和解压文件的教程如下: ,及

应该注意的是,我使用JavaAPI创建了安装我的应用程序时包含的zip。这可能就是为什么我在Android中使用JavaAPI对它们进行解压缩时得到了如此一致的结果


希望这有帮助!祝你好运

那么从存档文件而不是目录树和子目录树中读取文件呢?(即没有压缩的拉链)。在这种情况下,您只能复制一个文件。@DJHell这是个好主意。一半的文件是png图像,另一半是文本文件。如何通过代码引用这些文件的位置。我假设
Environment.getExternalStorageDirectory()+File.separator+“appFolder”+File.separator+“files.zip”+File.separator+“image.png”
不会work@MiroMarkarian我正在谷歌Play上构建这个应用程序,这样就不能告诉用户,另外,我的手机没有sd卡,而是一个模拟的sd卡。一个简单的getFileFromMyZippedFile(字符串文件路径)可能带有缓存,但正如我所说的IMHO。增加缓冲区大小是否会导致低端设备出现问题?如果太大,是的。。。。但是自从thunderbolt发布以来,我的大部分东西都使用了8192(对于低端来说应该是不错的),因为htc犯了这个错误。我的应用程序支持android 2.2及以上版本,尽管只有1.5%支持2.2,其余支持2.3.3及以上版本(几乎65%支持4.0及以上版本)。您认为我这样做会导致2.2设备出现任何问题吗?从我所记得的来看,thunderbolt是2.2还是2.3?不是。thunderbolt从2.2开始,我相信它当前的andriod版本是4.03。8192字节的缓冲区大小在几乎所有设备上都应该良好(与1024字节相比)