我们如何从受密码保护的RAR / ZIP中提取文件到SSD卡或直接转换为字符串?

时间:2013-04-29 20:23:43

标签: java android zip rar ssd

我想改变我的Android应用程序行为,从阅读APK中的文本文件,直接从具有密码保护的RAR或ZIP文件中读取它(我认为它可能与在我的APK中编码时的保护相同) )。这是我提出这个问题的同一个项目:How to convert an UTF String to ANSI and Create an ANSI text file in SSD with JAVA-ANDROID

但我不知道该怎么做。当我想要更改此文件内容时,我总是需要重新编译我的APK以再次发送给每个特定的客户端。如果我将此文件放在受密码保护的压缩存档中,我可能只会部署此文件并告诉客户端在手机SSD上放置特定路径。

我的应用程序应该将文件解压缩为一个字符串(它是一个文本文件)或将其解压缩到SSD中的文件中(它不太安全,我需要在读取其内容后删除该文件)。我该怎么做?我需要一些第三方库吗?你能告诉我代码吗?我只是用Java乞讨。

1 个答案:

答案 0 :(得分:2)

您可以尝试zip4j,然后执行此操作:

public String extractInputStream() {

    ZipInputStream is = null;
    String extracted = null;

    try {
        // get the zip
        ZipFile zipFile = new ZipFile("/path/to/my/file.zip");

        // set the password
        if (zipFile.isEncrypted()) {
            zipFile.setPassword("password");
        }
        //get the file inside the zip
        FileHeader fileHeader = zipFile.getFileHeader("yourfile.txt");

            if (fileHeader != null) {
                        is = zipFile.getInputStream(fileHeader);
                        //edited
                        extracted = new Scanner(is,"UTF-8").useDelimiter("\\A").next();
                        //edited
                        is.close();

        }
    } catch (ZipException e) {
        e.printStackTrace(); //make something better here
    } catch (FileNotFoundException e) {
        e.printStackTrace();//make something better here
    } catch (IOException e) {
        e.printStackTrace();//make something better here
    } catch (Exception e) {
        e.printStackTrace();//make something better here
    } 
    return extracted;
}

我没有测试这段代码,但你可以做,并改进它; - )