2010-12-13 138 views
3

我正在开发Android 2.2应用程序。将大文本文件添加到资产文件夹

我想为Android项目添加一些大文本文件(4.5MB或更多)。

首先,我不知道我是否可以将这种大文件添加到资产文件夹。但是,如果可以的话,是否可以压缩它们?

如何压缩文件?并解压缩?

任何其他更好的方式来添加大文本文件到Android项目?

谢谢。

+1

你可以将文本文件分割成更小的块吗?无论如何,当您尝试使用该设备时,设备可能不会一次加载该文件。 – 2010-12-13 14:56:05

回答

3

放置在资产文件夹中的文件超过1 MB将无法从您的应用程序读取(它会引发异常)。这是因为它们在构建过程中被压缩,因此电话需要大量资源才能在手机上进行解压缩。

我相信你可以将它们放置在原始文件夹,在那里他们将不会得到压缩或使用AAPT假设已经被压缩的扩展名(见here

然而,这不是有一个4.5 MB的文本好文件未压缩坐在APK中,这是浪费的空间,可以更好地处理。请尝试考虑首次使用时下载数据,或者按照以前建议的方式将文件拆分为块,以便AAPT可以对其进行压缩。

+1

“1mb以上的文件...” 我已经在stackoverflow上看到过这么多次,但不能在我的生活中找到它在文档中。你有链接到所述的地方吗? – matt 2015-07-16 14:53:52

1

你可以,但有时会出现问题。您不必压缩它,因为包本身是压缩的(.APK),事实上,当您读取它时,存储在assets文件夹中的任何内容都是未压缩的。关于文件的大小,您可能想要剪切它,并将文件的较小部分放入资源文件夹中。

0

我相信assets目录(raw除外)已经被压缩了。另外,Android Market即将/正在允许大小为50MB的应用程序。先尝试一下,然后看看你是否有任何问题。

0

您需要为4.5 MB的文本文件进行分片工作。您需要将文本文件分割成5个最大大小为1 MB的文件。话又说回来,你需要重新加入他们这样的:

 OutputStream databaseOutputStream = new FileOutputStream(outFileName); 
     InputStream databaseInputStream; 

     byte[] buffer = new byte[1024]; 
     int length; 

     databaseInputStream = myContext.getResources().openRawResource(
       R.raw.outfileaaa); 
     while ((length = databaseInputStream.read(buffer)) > 0) { 
      databaseOutputStream.write(buffer); 
     } 
     databaseInputStream.close(); 


     databaseInputStream = myContext.getResources().openRawResource(
       R.raw.outfileaba); 
     while ((length = databaseInputStream.read(buffer)) > 0) { 
      databaseOutputStream.write(buffer); 
     } 
     databaseInputStream.close(); 
     databaseOutputStream.flush(); 
     databaseOutputStream.close(); 
2

另一种方法是,你应该使用IOUtils第一次运行时您的文件复制到SD卡。这里也要小心,因为如果你要复制每个字节,那么会占用更多的资源。

它适用于我,我需要根据客户的要求将30MB大型zip文件放入资源文件夹中。