在我的应用程序中,我使用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());
}
}
}
}
此代码适用于单个文件,但我想压缩文件夹中的所有文件(更多文件)。
答案 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
类或ByteArrayOutputStream
和ByteArrayInputStream
。