压缩资源文件夹中的资源和/或文件的方法?

时间:2014-08-26 17:44:53

标签: android memory compression assets

我即将完成申请。我的资产文件夹中有超过20个PDF文件,显然它们占用了相当多的空间。有没有办法可以压缩这些文件以使应用程序更小?在我的代码/整个项目中检查/降低内存消耗的其他好方法有哪些?提前感谢任何输入。

1 个答案:

答案 0 :(得分:1)

您可以压缩文件,然后在需要时解压缩

  1. 这是一个教程 Zip programmatically with Android
  2. 检查 java.util.zip class,它提供了zip和amp;用于压缩和解压缩的gzip功能。
  3. 您还可以在安装应用程序后从其他站点下载pdfs
  4. 或者这应该有效:

        /*
     * 
     * Zips a file at a location and places the resulting zip file at the toLocation
     * Example: zipFileAtPath("downloads/myfolder", "downloads/myFolder.zip");
     */
    
    public boolean zipFileAtPath(String sourcePath, String toLocation) {
        // ArrayList<String> contentList = new ArrayList<String>();
        final int BUFFER = 2048;
    
    
        File sourceFile = new File(sourcePath);
        try {
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(toLocation);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                    dest));
            if (sourceFile.isDirectory()) {
                zipSubFolder(out, sourceFile, sourceFile.getParent().length());
            } else {
                byte data[] = new byte[BUFFER];
                FileInputStream fi = new FileInputStream(sourcePath);
                origin = new BufferedInputStream(fi, BUFFER);
                ZipEntry entry = new ZipEntry(getLastPathComponent(sourcePath));
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
            }
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    
    /*
     * 
     * Zips a subfolder
     * 
     */
    
    private void zipSubFolder(ZipOutputStream out, File folder,
            int basePathLength) throws IOException {
    
        final int BUFFER = 2048;
    
        File[] fileList = folder.listFiles();
        BufferedInputStream origin = null;
        for (File file : fileList) {
            if (file.isDirectory()) {
                zipSubFolder(out, file, basePathLength);
            } else {
                byte data[] = new byte[BUFFER];
                String unmodifiedFilePath = file.getPath();
                String relativePath = unmodifiedFilePath
                        .substring(basePathLength);
                Log.i("ZIP SUBFOLDER", "Relative Path : " + relativePath);
                FileInputStream fi = new FileInputStream(unmodifiedFilePath);
                origin = new BufferedInputStream(fi, BUFFER);
                ZipEntry entry = new ZipEntry(relativePath);
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
                origin.close();
            }
        }
    }
    
    /*
     * gets the last path component
     * 
     * Example: getLastPathComponent("downloads/example/fileToZip");
     * Result: "fileToZip"
     */
    public String getLastPathComponent(String filePath) {
        String[] segments = filePath.split("/");
        String lastPathComponent = segments[segments.length - 1];
        return lastPathComponent;
    }