Java tutorial
//package com.java2s; /* * * * * ** Copyright 2015, The LimeIME Open Source Project * ** * ** Project Url: http://github.com/lime-ime/limeime/ * ** http://android.toload.net/ * ** * ** This program is free software: you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation, either version 3 of the License, or * ** (at your option) any later version. * * * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * * * ** You should have received a copy of the GNU General Public License * ** along with this program. If not, see <http://www.gnu.org/licenses/>. * * * */ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Main { private static void addFileToZip(String sourceFilePath, String baseFolderPath, ZipOutputStream zos) throws Exception { addFileToZip("", sourceFilePath, baseFolderPath, zos); } private static void addFileToZip(String sourceFilePath, ZipOutputStream zos) throws Exception { addFileToZip("", sourceFilePath, "", zos); } private static void addFileToZip(String sourceFolderPath, String sourceFilePath, String baseFolderPath, ZipOutputStream zos) throws Exception { File item = new File(sourceFilePath); if (item == null || !item.exists()) return; //skip if the file is not exist if (isSymLink(item)) return; // do nothing to symbolic links. if (baseFolderPath == null) baseFolderPath = ""; if (item.isDirectory()) { for (String subItem : item.list()) { addFileToZip(sourceFolderPath + File.separator + item.getName(), sourceFilePath + File.separator + subItem, baseFolderPath, zos); } } else { byte[] buf = new byte[102400]; //100k buffer int len; FileInputStream inStream = new FileInputStream(sourceFilePath); if (baseFolderPath.equals("")) //sourceFiles in absolute path, zip the file with absolute path zos.putNextEntry(new ZipEntry(sourceFilePath)); else {//relative path String relativePath = sourceFilePath.substring(baseFolderPath.length()); zos.putNextEntry(new ZipEntry(relativePath)); } while ((len = inStream.read(buf)) > 0) { zos.write(buf, 0, len); } } } public static boolean isSymLink(File filePath) throws IOException { if (filePath == null) throw new NullPointerException("filePath cannot be null"); File canonical; if (filePath.getParent() == null) { canonical = filePath; } else { File canonDir = filePath.getParentFile().getCanonicalFile(); canonical = new File(canonDir, filePath.getName()); } return !canonical.getCanonicalFile().equals(canonical.getAbsoluteFile()); } }