Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.229.253] |
|
Сообщ.
#1
,
|
|
|
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class SimpleArchiver { static final String CMD_ADD = "add"; static final String CMD_EXTRACT = "extract"; static final String CMD_REMOVE = "remove"; static final String CMD_LIST = "list"; public static void main(String... args) throws IOException { if (args.length < 2 || args.length > 3) { System.out.printf( "Usage: SimpleArchiver <command> <zip-filename> [file-to-add-or-remove]\n" + "Commands:\n" + "\tadd - add file to archive\n" + "\textract - extract file from archive\n" + "\tremove - remove file from archive\n" + "\tlist - list files in archive\n"); return; } String command = args[0]; String zipFileName = args[1]; String fileName = null; if (args.length == 3) { fileName = args[2]; } if (CMD_LIST.equalsIgnoreCase(command)) { list(zipFileName); return; } else { if (fileName == null) { System.out.println("File not specified\n"); return; } if (CMD_ADD.equalsIgnoreCase(command)) { add(zipFileName, fileName); return; } else if (CMD_EXTRACT.equalsIgnoreCase(command)) { extract(zipFileName, fileName); return; } else if (CMD_REMOVE.equalsIgnoreCase(command)) { remove(zipFileName, fileName); return; } } System.out.printf("Bad command: %s\n", command); } static void copy(File from, File to) throws IOException { InputStream istream = new BufferedInputStream( new FileInputStream(from)); try { OutputStream ostream = new BufferedOutputStream( new FileOutputStream(to)); try { byte[] buffer = new byte[8192]; int readed; while ((readed = istream.read(buffer)) > 0) { ostream.write(buffer, 0, readed); } } finally { ostream.close(); } } finally { istream.close(); } } static void add(String zipFileName, String fileName) throws IOException { File zipFile = new File(zipFileName); File tmpFile = File.createTempFile("zip", "tmp"); File newFile = new File(fileName); byte[] buffer = new byte[8192]; int readed; ZipOutputStream zipOutputStream = new ZipOutputStream( new BufferedOutputStream( new FileOutputStream(tmpFile))); try { if (zipFile.exists()) { ZipInputStream zipInputStream = new ZipInputStream( new BufferedInputStream( new FileInputStream(zipFile))); try { ZipEntry entry; while ((entry = zipInputStream.getNextEntry()) != null){ if (entry.getName().equals(newFile.getName())) { continue; } ZipEntry newEntry = new ZipEntry(entry); zipOutputStream.putNextEntry(newEntry); while ((readed = zipInputStream.read(buffer)) > 0) { zipOutputStream.write(buffer, 0, readed); } zipOutputStream.closeEntry(); } } finally { zipInputStream.close(); } } InputStream fileInputStream = new BufferedInputStream( new FileInputStream(newFile)); try { System.out.printf("Adding %s\n", fileName); ZipEntry newEntry = new ZipEntry(newFile.getName()); newEntry.setSize(newFile.length()); newEntry.setTime(newFile.lastModified()); zipOutputStream.putNextEntry(newEntry); while ((readed = fileInputStream.read(buffer)) > 0) { zipOutputStream.write(buffer, 0, readed); } zipOutputStream.closeEntry(); } finally { fileInputStream.close(); } } finally { zipOutputStream.close(); } if (zipFile.exists()) { zipFile.delete(); } tmpFile.renameTo(zipFile); } static void extract(String zipFileName, String fileName) throws IOException { File zipFile = new File(zipFileName); if (!zipFile.exists()) { System.out.printf("Zip file not exists: %s\n", zipFile); return; } ZipInputStream zipInputStream = new ZipInputStream( new BufferedInputStream( new FileInputStream(zipFile))); try { ZipEntry entry; while ((entry = zipInputStream.getNextEntry()) != null){ if (entry.getName().equals(fileName)) { System.out.printf("Extracting %s\n", fileName); OutputStream fileOutputStream = new BufferedOutputStream( new FileOutputStream(fileName)); try { byte[] buffer = new byte[8192]; int readed; while ((readed = zipInputStream.read(buffer)) > 0) { fileOutputStream.write(buffer, 0, readed); } } finally { fileOutputStream.close(); } } } } finally { zipInputStream.close(); } } static void remove(String zipFileName, String fileName) throws IOException { File zipFile = new File(zipFileName); if (!zipFile.exists()) { System.out.printf("Zip file not exists: %s\n", zipFile); return; } File tmpFile = File.createTempFile("zip", "tmp"); byte[] buffer = new byte[8192]; int readed; ZipOutputStream zipOutputStream = new ZipOutputStream( new BufferedOutputStream( new FileOutputStream(tmpFile))); try { ZipInputStream zipInputStream = new ZipInputStream( new BufferedInputStream( new FileInputStream(zipFile))); try { ZipEntry entry; while ((entry = zipInputStream.getNextEntry()) != null){ if (entry.getName().equals(fileName)) { System.out.printf("Removing %s\n", fileName); continue; } ZipEntry newEntry = new ZipEntry(entry.getName()); newEntry.setSize(entry.getSize()); newEntry.setTime(entry.getTime()); zipOutputStream.putNextEntry(newEntry); while ((readed = zipInputStream.read(buffer)) > 0) { zipOutputStream.write(buffer, 0, readed); } zipOutputStream.closeEntry(); } } finally { zipInputStream.close(); } } finally { zipOutputStream.close(); } zipFile.delete(); tmpFile.renameTo(zipFile); } static void list(String zipFileName) throws IOException { File zipFile = new File(zipFileName); ZipInputStream zipInputStream = new ZipInputStream( new BufferedInputStream( new FileInputStream(zipFile))); try { ZipEntry entry; while ((entry = zipInputStream.getNextEntry()) != null){ System.out.printf("%s\n", entry.getName()); } } finally { zipInputStream.close(); } } } |