Android创建zip文件

Android创建zip文件,android,zipoutputstream,Android,Zipoutputstream,我正在使用这段代码创建一个zip文件: String filename = Helper.Timestamp() + ".zip"; ZipOutputStream out = Helper.CreateZipOutputStream(filename); Helper.AddZipFolder(out, Helper.ImageFolder); Helper.AddZipFile(out, new File(Settings.FILENAME)); try { out.close();

我正在使用这段代码创建一个zip文件:

String filename = Helper.Timestamp() + ".zip";
ZipOutputStream out = Helper.CreateZipOutputStream(filename);
Helper.AddZipFolder(out, Helper.ImageFolder);
Helper.AddZipFile(out, new File(Settings.FILENAME));
try {
    out.close();
} catch (IOException e) {
    e.printStackTrace();
}
助手功能:

public static String Timestamp() { return new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); }
public static ZipOutputStream CreateZipOutputStream(String filename){
    FileOutputStream dest = null;
    try {
        dest = new FileOutputStream(filename);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    return new ZipOutputStream(new BufferedOutputStream(dest));
}
public static void AddZipFolder(ZipOutputStream out, File folder){
    for (File file: folder.listFiles()){
        Helper.AddZipFile(out, file, folder.getName() + File.separator + file.getName());
    }
}
public static void AddZipFile(ZipOutputStream out, File file){
    AddZipFile(out, file, file.getName());
}
public static void AddZipFile(ZipOutputStream out, File file, String path){
    byte[] data = new byte[1024];
    FileInputStream in;
    try {
        in = new FileInputStream(file);
    } catch (FileNotFoundException e) {
        return;
    }
    try {
        out.putNextEntry(new ZipEntry(path));
        int len;
        while ((len = in.read(data)) > 0)
            out.write(data, 0, len);
        out.closeEntry();
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
然而,
out.write(数据,0,len)似乎有问题NullPointerException
。我相信这是因为我的
CreateZipOutputStream
抛出了一个
FileNotFoundException


那么我应该如何正确地创建一个zip文件呢?

因为您忘了在文件名上附加基本路径。您的文件名必须类似于:

String filename = Environment.getExternalStorageDirectory().getPath() + "/" + Helper.Timestamp() + ".zip";