如何压缩文件夹和下载

时间:2015-06-03 09:00:10

标签: java android

我已经实现了文件下载。它正在下载并保存到内存中。

现在我的问题是,如果有文件夹和子文件夹,我需要压缩文件夹并下载zip文件并将其保存在内存中。我尝试了很多,但我没有找到解决方案。任何人都可以指导我获得解决方案吗?

这里我的下载单个文件代码......

@Override
    protected String doInBackground(String... sUrl) {
        InputStream input = null;
        OutputStream output = null;
        ZipOutputStream zos = null;
        HttpURLConnection connection = null;
        try {
            URL url = new URL(sUrl[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();

            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                return "Server returned HTTP "
                        + connection.getResponseCode() + " "
                        + connection.getResponseMessage();
            }

            String fileName = tvtitle.getText().toString();
            String fileExtension = tvtype.getText().toString();

            File imageDirectory = new File(Path);
            imageDirectory.mkdirs();
            int fileLength = connection.getContentLength();
            String _path = Path;
            input = connection.getInputStream();
            File outputFile = new File(_path, fileName + fileExtension);
            output = new FileOutputStream(outputFile);
            // zos = new ZipOutputStream(output);

            byte data[] = new byte[4096];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {

                if (isCancelled()) {
                    input.close();
                    return null;
                }
                total += count;

                if (fileLength > 0) // only if total length is known
                    publishProgress((int) (total * 100 / fileLength));
                output.write(data, 0, count);
            }
        } catch (Exception e) {
            return e.toString();
        } finally {
            try {
                if (output != null)
                    output.close();
                if (input != null)
                    input.close();
            } catch (IOException ignored) {
            }

            if (connection != null)
                connection.disconnect();
        }
        return null;
    }

1 个答案:

答案 0 :(得分:0)

首先在清单

中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

通过传递“inputFolderPath”和“outputFolderPath”

来调用此方法
private static void zipFolder(String inputFolderPath, String outZipPath)  {
try {
    FileOutputStream fos = new FileOutputStream(outZipPath);
    ZipOutputStream zos = new ZipOutputStream(fos);
    File srcFile = new File(inputFolderPath);
    File[] files = srcFile.listFiles();
    Log.d("", "Zip directory: " + srcFile.getName());
    for (int i = 0; i < files.length; i++) {
        Log.d("", "Adding file: " + files[i].getName());
        byte[] buffer = new byte[1024];
        FileInputStream fis = new FileInputStream(files[i]);
        zos.putNextEntry(new ZipEntry(files[i].getName()));
        int length;
        while ((length = fis.read(buffer)) > 0) {
            zos.write(buffer, 0, length);
        }
        zos.closeEntry();
        fis.close();
    }
    zos.close();
} catch (IOException ioe) {
    Log.e("", ioe.getMessage());
}
}