Index: lutinutil/src/java/org/codelutin/util/FileUtil.java diff -u lutinutil/src/java/org/codelutin/util/FileUtil.java:1.11 lutinutil/src/java/org/codelutin/util/FileUtil.java:1.12 --- lutinutil/src/java/org/codelutin/util/FileUtil.java:1.11 Thu Aug 24 13:36:48 2006 +++ lutinutil/src/java/org/codelutin/util/FileUtil.java Fri Aug 25 16:59:15 2006 @@ -23,9 +23,9 @@ * Created: 22 nov. 2004 * * @author Benjamin Poussin - * @version $Revision: 1.11 $ + * @version $Revision: 1.12 $ * - * Mise a jour: $Date: 2006/08/24 13:36:48 $ + * Mise a jour: $Date: 2006/08/25 16:59:15 $ * par : $Author: bpoussin $ */ @@ -63,25 +63,81 @@ currentDirectory = dir; } + static public class PatternChooserFilter extends javax.swing.filechooser.FileFilter { + protected String pattern = null; + protected String description = null; + + public PatternChooserFilter(String pattern, String description) { + this.pattern = pattern; + this.description = description; + } + + @Override + public boolean accept(File f) { + boolean result = f.isDirectory() || f.getAbsolutePath().matches(pattern); + return result; + } + @Override + public String getDescription() { + return description; + } + + }; + + /** * Retourne le nom du fichier entre dans la boite de dialogue. * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données + * par deux, le pattern du filtre + la description du filtre + * @return + * + * @see #getFile(javax.swing.filechooser.FileFilter[]) */ - static public String getFile(){ + static public File getFile(String ... patternOrDescriptionFilters) { + if (patternOrDescriptionFilters.length % 2 != 0) { + throw new IllegalArgumentException("Arguments must be (pattern, description) couple"); + } + javax.swing.filechooser.FileFilter [] filters = new javax.swing.filechooser.FileFilter[patternOrDescriptionFilters.length / 2]; + for (int i=0; i 0) { + if (filters.length == 1) { + chooser.setFileFilter(filters[0]); + } else { + for (javax.swing.filechooser.FileFilter filter : filters) { + chooser.addChoosableFileFilter(filter); + } + } + } chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - int returnVal = chooser.showDialog(null, null); + int returnVal = chooser.showDialog(null, "Ok"); if(returnVal == JFileChooser.APPROVE_OPTION) { File theFile = chooser.getSelectedFile(); if(theFile != null) { currentDirectory = theFile; - return theFile.getAbsolutePath(); + return theFile.getAbsoluteFile(); } } - else - return null; } catch(Exception eee){ log.warn("Erreur:", eee); Index: lutinutil/src/java/org/codelutin/util/ZipUtil.java diff -u lutinutil/src/java/org/codelutin/util/ZipUtil.java:1.1 lutinutil/src/java/org/codelutin/util/ZipUtil.java:1.2 --- lutinutil/src/java/org/codelutin/util/ZipUtil.java:1.1 Thu Aug 24 13:36:48 2006 +++ lutinutil/src/java/org/codelutin/util/ZipUtil.java Fri Aug 25 16:59:15 2006 @@ -23,24 +23,31 @@ * Created: 24 août 2006 10:13:35 * * @author poussin - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ * - * Last update: $Date: 2006/08/24 13:36:48 $ + * Last update: $Date: 2006/08/25 16:59:15 $ * by : $Author: bpoussin $ */ package org.codelutin.util; import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.Collection; +import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import org.apache.commons.logging.LogFactory; @@ -59,7 +66,46 @@ /** Taille du buffer pour les lectures/écritures */ private static final int BUFFER_SIZE = 8 * 1024; + static private FileFilter ALL_FILE_FILTER = new FileFilter() { + public boolean accept(File pathname) { + return true; + } + + }; + /** + * uncompress zipped file in targetDir + * + * @param file + * @param regionDirectory + * @return return last entry name + * @throws IOException + */ + public static String uncompress(File file, File targetDir) throws IOException { + String result = ""; + ZipInputStream in = new ZipInputStream(new FileInputStream(file)); + ZipEntry entry = null; + while ((entry = in.getNextEntry()) != null) { + String name = entry.getName(); + result = name; + File target = new File(targetDir, name); + if (entry.isDirectory()) { + target.mkdirs(); + } else { + OutputStream out = new BufferedOutputStream(new FileOutputStream(target)); + byte[] buffer = new byte[BUFFER_SIZE]; + int len = 0; + while ((len = in.read(buffer, 0, BUFFER_SIZE)) != -1) { + out.write(buffer, 0, len); + } + out.close(); + } + } + in.close(); + return result; + } + + /** * Compress 'includes' files in zipFile. If file in includes is directory * only the directory is put in zipFile, not the file contained in directory * @@ -93,13 +139,39 @@ } zipOStream.closeEntry(); } - + zipOStream.close(); } finally { oStream.close(); } } /** + * if fileOrDirectory is directory Compress recursively all file in this + * directory, else if is just file compress one file. + * + * Entry result name in zip start at fileOrDirectory. + * example: if we compress /etc/apache, entry will be apache/http.conf, ... + * + * @param zipFile + * @param fileOrDirectory + * @param filter used to accept file, if null, all file is accepted + * @throws IOException + */ + static public void compress(File zipFile, File fileOrDirectory, FileFilter filter) throws IOException { + if (filter == null) { + filter = ALL_FILE_FILTER; + } + List files = new ArrayList(); + if (fileOrDirectory.isDirectory()) { + files = FileUtil.getFilteredElements(fileOrDirectory, filter); + } else if (filter.accept(fileOrDirectory)){ + files.add(fileOrDirectory); + } + + compressFiles(zipFile, fileOrDirectory.getParentFile(), files); + } + + /** *
  • supprime le root du fichier *
  • Converti les '\' en '/' car les zip entry utilise des '/' *
  • ajoute un '/' a la fin pour les repertoires @@ -127,39 +199,6 @@ } return result; } - - /** - * if fileOrDirectory is directory Compress recursively all file in this - * directory, else if is just file compress one file. - * - * Entry result name in zip start at fileOrDirectory. - * example: if we compress /etc/apache, entry will be apache/http.conf, ... - * - * @param zipFile - * @param fileOrDirectory - * @param filter used to accept file, if null, all file is accepted - * @throws IOException - */ - static public void compress(File zipFile, File fileOrDirectory, FileFilter filter) throws IOException { - if (filter == null) { - filter = ALL_FILE_FILTER; - } - List files = new ArrayList(); - if (fileOrDirectory.isDirectory()) { - files = FileUtil.getFilteredElements(fileOrDirectory, filter); - } else if (filter.accept(fileOrDirectory)){ - files.add(fileOrDirectory); - } - - compressFiles(zipFile, fileOrDirectory.getParentFile(), files); - } - - static private FileFilter ALL_FILE_FILTER = new FileFilter() { - public boolean accept(File pathname) { - return true; - } - - }; }