Need help to build app压缩多个图像并自动压缩-KotlinAndroid

8mmmxcuj  于 2023-08-01  发布在  Android
关注(0)|答案(1)|浏览(92)

我是使用Kotlin语言开发Android应用程序的初学者。我已经写了一些简单的应用程序,现在我计划写一个应用程序,允许用户压缩存储在内部存储器中的多个图像(JPG格式),以自定义压缩率(在EditText中输入),然后自动压缩所有这些图像到一个zip文件,以方便附件到电子邮件或共享。压缩和压缩后的图像文件保存到自定义文件夹中。由于我缺乏经验,我将感谢你的指导从哪里开始。非常感谢您的光临。
我已经试过按照互联网上的一些说明操作,但是当我运行它们时,我得到一个错误信息,或者程序一次只允许我压缩一个图像。

ttcibm8c

ttcibm8c1#

您可以尝试下面的代码片段压缩多个文件。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipHelper {

    public static void compressFiles(String zipFilePath, String[] sourceFiles) throws IOException {
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFilePath)))) {
            byte[] buffer = new byte[1024];
            for (String filePath : sourceFiles) {
                try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filePath))) {
                    ZipEntry zipEntry = new ZipEntry(getFileNameFromPath(filePath));
                    zipOutputStream.putNextEntry(zipEntry);
                    int bytesRead;
                    while ((bytesRead = inputStream.read(buffer)) != -1) {
                        zipOutputStream.write(buffer, 0, bytesRead);
                    }
                    zipOutputStream.closeEntry();
                }
            }
        }
    }

    private static String getFileNameFromPath(String filePath) {
        // Extract the file name from the full path
        int lastSeparator = filePath.lastIndexOf("/");
        return (lastSeparator == -1) ? filePath : filePath.substring(lastSeparator + 1);
    }
}

字符串
下面是使用上述方法的示例代码。

String[] filesToCompress = new String[]{"/path/to/file1.txt", "/path/to/file2.txt", "/path/to/file3.png"};
String zipFilePath = "/path/to/archive.zip";

try {
    ZipHelper.compressFiles(zipFilePath, filesToCompress);
    // Compression completed successfully
} catch (IOException e) {
    e.printStackTrace();
    // Handle compression error
}


希望对你有帮助。安基特

相关问题