2013-07-25 68 views
1

我试图从我的apk资源文件夹快速复制大量的文件夹和子文件夹到我的SD卡。这些文件夹包含12mb的小文件,可能总计2500个。这个SO问题的代码示例有效,但在我的设备上需要5分钟以上。有没有更快的方法来做到这一点?从资产复制12MB文件夹从资产到SD卡快速

我最初尝试将文件夹添加到zip归档文件,并在将它移动到设备上后解压缩,但它在不同设备上创建了很多问题,并且在整个过程中失败了很多。

+1

那么从档案文件中读取文件而不是dir和subdirs树呢? (即没有压缩的邮编)。在这种情况下,你只有一个文件要复制。 –

+0

@DJHell这是一个好主意。一半的文件是PNG图像,另一半是文本文件。我将如何通过我的代码引用这些文件的位置。我假设'Environment.getExternalStorageDirectory()+ File.separator +“appFolder”+ File.separator +“files.zip”\t + File.separator +“image.png”'不会工作 – Peter

+0

@MiroMarkarian我正在构建此应用程序在谷歌播放销售,所以这是不是一个选项告诉用户,也是我的手机没有一个SD卡,但一个模拟的。 – Peter

回答

1

我已经受够了很不错的,一致的结果创建一个zip文件,将其放入我的应用程序的原始或资产中,并在用户第一次打开该应用程序时将其解压缩。我建议你再试一次,因为我印象深刻的是,我已经看到了几百次安装中的零问题。

的教程我基于辅助方法来压缩和解压缩文件的位置: Unzipping Files w/ Android,并且 Zipping Files w/ Android

应当指出的是,我使用的Java API来创建ZIP,我包括与安装的我的应用程序这可能就是为什么我使用Android中的Java API解压缩这些一致结果的原因。

希望这会有所帮助!祝你好运!

1

12MB应该保存快一点,如果你正在使用从其他SO question的方法,尝试在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); 
    } 
} 
+0

增加缓冲区大小是否会导致低端设备出现问题? – Peter

+0

如果它太大是的......但我使用8192(这应该是适合低端)自雷霆出来以来,我的大部分东西因为这个失误HTC造成的。 http://stackoverflow.com/questions/5358014/android-httpclient-oom-on-4g-lte-htc-thunderbolt – petey

+0

我的应用程序支持android 2.2及更高版本,虽然只有1.5%是2.2其余的是2.3.3及以上(几乎65%是4.0以上)。你认为我会为2.2设备造成任何问题吗?从我能记得的雷霆2.2或2.3? – Peter

相关问题