Constructors Summary |
---|
public ZipWriter(String zipFilename, String dirName)
init(zipFilename, dirName);
createItemList(null);
|
public ZipWriter(String zipFilename, String dirName, ZipItem[] theItems)
items = theItems;
init(zipFilename, dirName);
|
public ZipWriter(String zipFilename, String dirName, String[] fileList)
init(zipFilename, dirName);
createItemList(fileList);
|
public ZipWriter(OutputStream outStream, String dirName, String[] fileList)
init(outStream, dirName);
createItemList(fileList);
|
Methods Summary |
---|
private void | addEntry(ZipItem item)
int totalBytes = 0;
ZipEntry ze = new ZipEntry(item.name);
zipStream.putNextEntry(ze);
// bnevins -- don't try to "read" from a directory file.
// Any item.name that ends in "/" must be an empty directory, or it wouldn't be here!
// important: if you look inside the zip file with WinZip you
// won't see empty directories. But they are there -- and they will
// get extracted!
if(!item.name.endsWith("/"))
{
FileInputStream in = new FileInputStream(item.file);
for(int numBytes = in.read(buffer); numBytes > 0; numBytes = in.read(buffer))
{
zipStream.write(buffer, 0, numBytes);
totalBytes += numBytes;
}
in.close();
}
zipStream.closeEntry();
|
private void | createItemList(java.lang.String[] files)
try
{
if(files == null)
{
FileListerRelative lister = new FileListerRelative(new File(dirName));
files = lister.getFiles();
}
if(files.length <= 0)
throw new ZipFileException("No files to add!");
items = new ZipItem[files.length];
for(int i = 0; i < files.length; i++)
{
File f = new File(dirName + files[i]);
items[i] = new ZipItem(f, files[i].replace('\\", '/")); // just in case...
// bnevins -- add a trailing "/" to empty directories
if(f.isDirectory())
items[i].name += "/";
}
}
catch(Throwable t)
{
throw new ZipFileException(t);
}
|
public void | excludeDirs(java.lang.String[] dirs)Exclude any files that are under these directories.
E.g. suppose you have C:/temp/x1, C:/temp/x2 and C:/temp/x3
and the root is set to c:temp. Thhen to exclude the contents of the second
2 dirs you would send in a String array with "x2" and "x3"
// make sure the names all end with "/"
for(int i = 0; i < dirs.length; i++)
{
if(!dirs[i].endsWith("/"))
dirs[i] += "/";
}
// copy all the items we will retain into list
List list = new ArrayList(items.length);
for(int i = 0; i < items.length; i++)
{
for(int j = 0; j < dirs.length; j++)
{
if(!items[i].name.startsWith(dirs[j]))
list.add(items[i]);
//else
//System.out.println("REMOVING: " + items[i].name);
}
}
// reset items to the pruned list
if(list.size() != items.length)
{
items = new ZipItem[list.size()];
items = (ZipItem[])list.toArray(items);
}
|
java.lang.String | getDirName()
return dirName;
|
private void | init(java.lang.String outFileName, java.lang.String dirName)
try
{
init(new FileOutputStream(outFileName), dirName);
}
catch(Exception e)
{
throw new ZipFileException(e);
}
|
private void | init(java.io.OutputStream outStream, java.lang.String dirName)
try
{
//make sure it's really a directory
File f = new File(dirName);
// change the filename to be full-path & UNIX style
dirName = FileUtils.safeGetCanonicalPath(f);
dirName = dirName.replace('\\", '/"); // all UNIX-style filenames...
// we need the dirname to end in a '/'
if(!dirName.endsWith("/"))
dirName += "/";
this.dirName = dirName;
zipStream = new ZipOutputStream(outStream);
}
catch(Throwable t)
{
throw new ZipFileException(t);
}
|
public static void | main(java.lang.String[] args)
if(args == null || args.length != 2)
usage();
try
{
ZipWriter zw = new ZipWriter(args[0], args[1]);
zw.write();
}
catch(ZipFileException e)
{
System.exit(0);
}
|
public void | safeWrite()Does not throw an exception when there is a duplicate zip entry.
try
{
for(int i = 0; i < items.length; i++)
{
try
{
addEntry(items[i]);
}
catch (ZipException e)
{
// ignore - duplicate zip entry
}
}
zipStream.close();
}
catch(ZipFileException z)
{
throw z;
}
catch(Exception e)
{
throw new ZipFileException(e);
}
|
private static void | usage()
System.out.println("usage: java com.elf.util.zip.ZipWriter zip-filename directory-name");
System.exit(1);
|
public void | write()
try
{
for(int i = 0; i < items.length; i++)
{
addEntry(items[i]);
}
zipStream.close();
}
catch(ZipFileException z)
{
throw z;
}
catch(Exception e)
{
throw new ZipFileException(e);
}
|