如何压缩Blackberry中的文件?

时间:2012-11-09 07:54:35

标签: blackberry java-me

在我的应用程序中,我使用html模板和图像作为浏览器字段并保存在SD卡中。现在我想压缩那个html,图像文件并发送到PHP服务器。如何压缩该文件并发送到服务器?给我一些可能有用的样品。

我试过这种方式......我的代码是

编辑:

private void zipthefile() {
    String out_path = "file:///SDCard/" + "newtemplate.zip";
    String in_path = "file:///SDCard/" + "newtemplate.html";
    InputStream inputStream = null;
    GZIPOutputStream os = null;
    try {
        FileConnection fileConnection = (FileConnection) Connector
                .open(in_path);//read the file from path
        if (fileConnection.exists()) {
            inputStream = fileConnection.openInputStream();
        }

        byte[] buffer = new byte[1024];

        FileConnection path = (FileConnection) Connector
                .open(out_path,
                        Connector.READ_WRITE);//create the out put file path

        if (!path.exists()) {
            path.create();
        }
        os = new GZIPOutputStream(path.openOutputStream());// for create the gzip file

        int c;

        while ((c = inputStream.read()) != -1) {
            os.write(c);
        }
    } catch (Exception e) {
        Dialog.alert("" + e.toString());
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
                Dialog.alert("" + e.toString());
            }
        }
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
                Dialog.alert("" + e.toString());
            }
        }
    }

}

此代码适用于单个文件,但我想压缩文件夹中的所有文件(更多文件)。

1 个答案:

答案 0 :(得分:2)

如果您不熟悉它们,我可以告诉您,在Java中,流类遵循Decorator Pattern。这些旨在通过管道传输到其他流来执行其他任务。例如,FileOutputStream允许您将字节写入文件,如果用BufferedOutputStream进行装饰,那么您也可以缓冲(大块数据在最终写入光盘之前存储在RAM中) 。或者如果你用GZIPOutputStream装饰它,那么你也会得到压缩。

示例:

//To read compressed file:
InputStream is = new GZIPInputStream(new FileInputStream("full_compressed_file_path_here"));

//To write to a compressed file:
OutputStream os = new GZIPOutputStream(new FileOutputStream("full_compressed_file_path_here"));

这是涵盖基本I / O的good tutorial。尽管是为JavaSE编写的,但你会发现它很有用,因为大多数东西在BlackBerry中都是一样的。

在API中,您可以使用以下类: GZIPInputStream
GZIPOutputStream
ZLibInputStream
ZLibOutputStream

如果您需要在流和字节数组之间进行转换,请使用IOUtilities类或ByteArrayOutputStreamByteArrayInputStream