Author: tchemit
Date: 2009-02-09 13:44:28 +0000 (Mon, 09 Feb 2009)
New Revision: 1333
Modified:
lutinutil/trunk/changelog.txt
lutinutil/trunk/src/main/java/org/codelutin/util/FileUtil.java
lutinutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties
Log:
add inputStreamToFile method in FileUtil + javadoc on this class
Modified: lutinutil/trunk/changelog.txt
===================================================================
--- lutinutil/trunk/changelog.txt 2009-02-08 19:38:54 UTC (rev 1332)
+++ lutinutil/trunk/changelog.txt 2009-02-09 13:44:28 UTC (rev 1333)
@@ -1,4 +1,5 @@
ver 1.0.3 ??? 200901??
+ * 20090209 [chemit] add inputStreamToFile method in FileUtil + javadoc on this class
* 20090208 [chemit] add PropertyChangedSupport in ApplicationConfig
* 20090203 [chemit] fix StringUtil failed tests since to locale.
* 20090126 [chemit] i18n Resource class
Modified: lutinutil/trunk/src/main/java/org/codelutin/util/FileUtil.java
===================================================================
--- lutinutil/trunk/src/main/java/org/codelutin/util/FileUtil.java 2009-02-08 19:38:54 UTC (rev 1332)
+++ lutinutil/trunk/src/main/java/org/codelutin/util/FileUtil.java 2009-02-09 13:44:28 UTC (rev 1333)
@@ -97,7 +97,7 @@
*
* @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données
* par deux, le pattern du filtre + la description du filtre
- * @return
+ * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
* @see #getFile(javax.swing.filechooser.FileFilter[])
*/
static public File getFile(String... patternOrDescriptionFilters) {
@@ -120,7 +120,7 @@
* Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null.
*
* @param filters les filtres a ajouter
- * @return
+ * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
*/
static public File getFile(javax.swing.filechooser.FileFilter... filters) {
try {
@@ -154,7 +154,7 @@
/**
* @param title le nom de la boite de dialogue
- * @param approvalText
+ * @param approvalText le texte de l'action d'acceptation du répertoire dans le file chooser
* @return le nom du repertoire entre dans la boite de dialogue.
* Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne
* null.
@@ -195,9 +195,9 @@
/**
* Permet de convertir un fichier en un tableau de byte
*
- * @param file
- * @return
- * @throws IOException
+ * @param file le fichier source à convertire
+ * @return le contenu du fichier sous la forme d'un tableau de bytes.
+ * @throws IOException if any io pb
*/
static public byte[] fileToByte(File file) throws IOException {
InputStream in = new BufferedInputStream(new FileInputStream(file));
@@ -213,12 +213,40 @@
}
/**
+ * Permet de recopier un stream dans un fichier
+ *
+ * @param src the incoming stream to grab
+ * @param dst the dst file
+ * @return the file filled by incoming input stream
+ * @throws IOException if any io pb
+ * @throws NullPointerException if src or dst parameter is null
+ */
+ static public File inputStreamToFile(InputStream src, File dst) throws IOException, NullPointerException {
+ if (src == null) {
+ throw new NullPointerException("parameter 'src' can not be null");
+ }
+ if (dst == null) {
+ throw new NullPointerException("parameter 'dst' can not be null");
+ }
+
+ ByteArrayOutputStream result = new ByteArrayOutputStream();
+ BufferedOutputStream tmp = new BufferedOutputStream(result);
+ for (int b = src.read(); b != -1; b = src.read()) {
+ tmp.write(b);
+ }
+ src.close();
+ tmp.close();
+ byteToFile(result.toByteArray(), dst);
+ return dst;
+ }
+
+ /**
* Permet de convertir des bytes en fichier, le fichier sera automatiquement
* supprimé a la fin de la JVM.
*
- * @param bytes
+ * @param bytes the array of bytes to copy in dstination file
* @return le fichier temporaire contenant les bytes
- * @throws IOException
+ * @throws IOException if any io pb
*/
static public File byteToFile(byte[] bytes) throws IOException {
File file = File.createTempFile("FileUtil-byteToFile", ".tmp");
@@ -229,10 +257,10 @@
/**
* Permet de convertir des bytes en fichier
*
- * @param bytes
+ * @param bytes the array of bytes to put in the given destination file
* @param file le fichier dans lequel il faut ecrire les bytes
* @return le fichier passé en parametre
- * @throws IOException
+ * @throws IOException if any io pb
*/
static public File byteToFile(byte[] bytes, File file) throws IOException {
OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
@@ -244,9 +272,9 @@
/**
* Retourne un Reader utilisant l'encoding par defaut {@link #ENCODING}
*
- * @param file
- * @return
- * @throws IOException
+ * @param file the given reader
+ * @return the reader on the given file
+ * @throws IOException if any io pb
*/
static public BufferedReader getReader(File file) throws IOException {
return getReader(file, ENCODING);
@@ -256,10 +284,10 @@
* Retourne un reader utilisant l'encoding choisi et placé dans un
* BufferedReader
*
- * @param file
+ * @param file the given file
* @param encoding (ISO-8859-1, UTF-8, ...)
- * @return
- * @throws IOException
+ * @return the buffered reader in the given encoding
+ * @throws IOException if any io pb
*/
static public BufferedReader getReader(File file, String encoding) throws IOException {
FileInputStream inf = new FileInputStream(file);
@@ -272,9 +300,9 @@
/**
* Retourne un Writer utilisant l'encoding par defaut {@link #ENCODING}
*
- * @param file
- * @return
- * @throws IOException
+ * @param file the given file
+ * @return the writer on the given file
+ * @throws IOException if any io pb
*/
static public BufferedWriter getWriter(File file) throws IOException {
return getWriter(file, ENCODING);
@@ -284,10 +312,10 @@
* Retourne un writer utilisant l'encoding choisi et placé dans un
* BufferedWriter
*
- * @param file
+ * @param file the given file
* @param encoding (ISO-8859-1, UTF-8, ...)
- * @return
- * @throws IOException
+ * @return the buffered writer on the given file with given encoding
+ * @throws IOException if any io pb
*/
static public BufferedWriter getWriter(File file, String encoding) throws IOException {
FileOutputStream outf = new FileOutputStream(file);
@@ -297,10 +325,7 @@
return result;
}
- public static void main(String[] args) {
- }
-
/**
* Permet de creer un nouveu repertoire temporaire, l'effacement du
* répertoire est a la charge de l'appelant
@@ -310,7 +335,7 @@
* @param tmpdir le répertoire temporaire ou il faut creer le repertoire
* si null on utilise java.io.tmpdir
* @return le fichier pointant sur le nouveau repertoire
- * @throws java.io.IOException
+ * @throws java.io.IOException if any io pb
*/
static public File createTempDirectory(String prefix, String suffix, File tmpdir) throws IOException {
if (tmpdir == null) {
@@ -330,10 +355,10 @@
* Permet de creer un nouveu repertoire temporaire, l'effacement du
* répertoire est a la charge de l'appelant
*
- * @param prefix
- * @param suffix
- * @return
- * @throws java.io.IOException
+ * @param prefix le prefix du repertoire a creer
+ * @param suffix le suffix du repertoire a creer.
+ * @return the temprary created file
+ * @throws java.io.IOException if any io pb
*/
static public File createTempDirectory(String prefix, String suffix) throws IOException {
return createTempDirectory(prefix, suffix, null);
@@ -342,8 +367,8 @@
/**
* Regarde si le fichier f1 est plus recent que le fichier f2
*
- * @param f1
- * @param f2
+ * @param f1 the first file
+ * @param f2 the second file
* @return vrai si f1 est plus recent que f2
*/
static public boolean isNewer(File f1, File f2) {
@@ -356,8 +381,8 @@
* chaine de carateres
*
* @param file le fichier a lire
- * @return
- * @throws IOException
+ * @return le contenu du fichier
+ * @throws IOException if any io pb
*/
static public String readAsString(File file) throws IOException {
StringBuffer result = new StringBuffer();
@@ -380,6 +405,8 @@
* @throws IOException if any pb while writing
*/
static public void writeString(File file, String content) throws IOException {
+ //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
+ // ne puisse être crée.
file.getParentFile().mkdirs();
BufferedWriter out = getWriter(file);
out.write(content);
@@ -395,6 +422,8 @@
* @throws IOException if any pb while writing
*/
static public void writeString(File file, String content, String encoding) throws IOException {
+ //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
+ // ne puisse être crée.
file.getParentFile().mkdirs();
BufferedWriter out = getWriter(file, encoding);
out.write(content);
@@ -407,7 +436,7 @@
*
* @param content le contenu du fichier temporaire
* @return le fichier qui contient content
- * @throws IOException
+ * @throws IOException if any io pb
*/
static public File getTempFile(String content) throws IOException {
return getTempFile(content, "");
@@ -420,7 +449,7 @@
* @param content le contenu du fichier temporaire
* @param fileSuffix l'extension du fichier créé
* @return le fichier qui contient content
- * @throws IOException
+ * @throws IOException if any io pb
*/
static public File getTempFile(String content, String fileSuffix) throws IOException {
File result = File.createTempFile("tmp-" + FileUtil.class.getName(), fileSuffix);
@@ -483,7 +512,7 @@
* Retourne tous les sous répertoires du répertoire passé en argument.
*
* @param directory un répertoire
- * @return une liste d'objet {@link java.io.File} de répertoires et ceci
+ * @return une liste d'objet {@link File} de répertoires et ceci
* recursivement à partir de directory, si directory
* n'est pas un répertoire la liste est vide.
*/
@@ -500,7 +529,7 @@
* Retourne tous les fichiers du répertoire passé en argument.
*
* @param directory un répertoire
- * @return une liste d'objet {@link java.io.File} des fichiers et ceci
+ * @return une liste d'objet {@link File} des fichiers et ceci
* recursivement à partir de directory, si directory n'est pas un
* répertoire la liste est vide
*/
@@ -520,8 +549,8 @@
* @param directory le répertoire à partir duquel il faut faire la recherche
* @param pattern le pattern que doit respecter le fichier pour être dans la
* liste résultante
- * @param recursively
- * @return une liste d'objet {@link java.io.File} qui ont s'attisfait le
+ * @param recursively flag pour indiquer si on doit descendre dans les sous répertoires
+ * @return une liste d'objet {@link File} qui ont s'attisfait le
* pattern.
*/
public static List<File> find(File directory, final String pattern, boolean recursively) {
@@ -545,8 +574,8 @@
* @param directory repertoire à partir duquel il faut faire la recherche
* @param ff le filtre à appliquer pour savoir si le fichier parcouru doit
* être conservé dans les résultats, ou null pour tous les fichiers
- * @param recursively
- * @return une liste d'objet {@link java.io.File}, qui s'attisfont le filtre
+ * @param recursively un flag pour indiquer si on doit descendre dans les répertoires
+ * @return une liste d'objet {@link File}, qui s'attisfont le filtre
*/
public static List<File> getFilteredElements(File directory, FileFilter ff, boolean recursively) {
ArrayList<File> result = new ArrayList<File>();
@@ -572,7 +601,7 @@
/**
* Supprime recursivement tout le contenu d'un répertoire.
*
- * @param directory
+ * @param directory le chemin du répertoire à supprimer
* @return vrai si tout se passe bien, false si la suppression d'un élement
* se passe mal
*/
@@ -583,7 +612,7 @@
/**
* Supprime recursivement tout le contenu d'un répertoire.
*
- * @param directory
+ * @param directory le répertoire à supprimer
* @return vrai si tout se passe bien, false si la suppression d'un élement
* se passe mal
*/
@@ -610,8 +639,8 @@
boolean result = fileAction.doAction(f);
if (f.isDirectory()) {
File list[] = f.listFiles();
- for (int i = 0; i < list.length; i++) {
- result = result && walkAfter(list[i], fileAction);
+ for (File aList : list) {
+ result = result && walkAfter(aList, fileAction);
}
}
return result;
@@ -632,8 +661,8 @@
boolean result = true;
if (f.isDirectory()) {
File list[] = f.listFiles();
- for (int i = 0; i < list.length; i++) {
- result = result && walkBefore(list[i], fileAction);
+ for (File aList : list) {
+ result = result && walkBefore(aList, fileAction);
}
}
return result && fileAction.doAction(f);
@@ -647,6 +676,8 @@
* @throws IOException Erreur de copie
*/
public static void copy(File source, File target) throws IOException {
+ //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
+ // ne puisse être copié.
target.getParentFile().mkdirs();
FileChannel sourceChannel = new FileInputStream(source).getChannel();
FileChannel targetChannel = new FileOutputStream(target).getChannel();
@@ -674,11 +705,11 @@
* copyRecursively("/truc/titi", "/var/tmp") donnera le repertoire
* "/var/tmp/titi"
*
- * @param srcDir
- * @param destDir
+ * @param srcDir le répertoire source à copier
+ * @param destDir le répertoire destination où copier
* @param includePatterns les patterns que doivent resperter les
* fichiers/repertoires pour etre copié. Si vide alors tout est copié
- * @throws IOException
+ * @throws IOException if any io pb
*/
static public void copyRecursively(File srcDir, File destDir, String... includePatterns) throws IOException {
copyAndRenameRecursively(srcDir, destDir, null, null, includePatterns);
@@ -690,14 +721,14 @@
* copyRecursively("/truc/titi", "/var/tmp", "bidulle") donnera le repertoire
* "/var/tmp/bidulle", 'bidulle' remplacant 'titi'
*
- * @param srcDir
- * @param destDir
+ * @param srcDir le répertoire source à copier
+ * @param destDir le répertoire destination où copier
* @param renameFrom pattern to permit rename file before uncompress it
* @param renameTo new name for file if renameFrom is applicable to it
* you can use $1, $2, ... if you have '(' ')' in renameFrom
* @param includePatterns les patterns que doivent resperter les
* fichiers/repertoires pour etre copié. Si vide alors tout est copié
- * @throws IOException
+ * @throws IOException if any io pb
*/
static public void copyAndRenameRecursively(File srcDir, File destDir,
String renameFrom, String renameTo, String... includePatterns) throws IOException {
@@ -710,8 +741,8 @@
* copyRecursively("/truc/titi", "/var/tmp", "bidulle") donnera le repertoire
* "/var/tmp/bidulle", 'bidulle' remplacant 'titi'
*
- * @param srcDir
- * @param destDir
+ * @param srcDir le répertoire source à copier
+ * @param destDir le répertoire destination où copier
* @param includeSrcDir si vrai alors le repertoire source est copie dans le
* repertoire destination et non pas seulement les fichiers qu'il contient
* @param renameFrom pattern to permit rename file before uncompress it
@@ -720,7 +751,7 @@
* @param exclude inverse include pattern interpretation
* @param includePatterns les patterns que doivent resperter les
* fichiers/repertoires pour etre copié. Si vide alors tout est copié
- * @throws IOException
+ * @throws IOException if any io pb
*/
static public void copyAndRenameRecursively(File srcDir, File destDir,
boolean includeSrcDir, String renameFrom, String renameTo, boolean exclude,
@@ -748,6 +779,8 @@
File destFile = new File(destDir, path);
if (file.isDirectory()) {
log.debug("create directory: " + destFile);
+ //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
+ // ne puisse être copié.
destFile.mkdirs();
} else {
log.debug("copy " + path + " to " + destFile);
@@ -757,15 +790,24 @@
}
}
+ /**
+ * @param b first operande
+ * @param c seconde operande
+ * @return b^c
+ * @deprecated Y'a un opérateur java qui fait ca très bien :) il s'agit de ^
+ */
static private boolean xor(boolean b, boolean c) {
- if (b) return !c;
- else return c;
+ if (b) {
+ return !c;
+ } else {
+ return c;
+ }
}
/**
- * @param file
- * @param includePatterns
- * @return
+ * @param file le fichier à tester.
+ * @param includePatterns les patterns pour accepeter le fichier depuis son nom
+ * @return <code>true</code> si le fichier est accepté, <code>false> autrement.
*/
private static boolean copyRecursivelyAccept(File file, String[] includePatterns) {
boolean result = includePatterns.length == 0;
Modified: lutinutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties
===================================================================
--- lutinutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties 2009-02-08 19:38:54 UTC (rev 1332)
+++ lutinutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties 2009-02-09 13:44:28 UTC (rev 1333)
@@ -1,30 +1,30 @@
hello\ you\ \!=
-lutinuitl.error.convert.file.to.url=Le fichier '%1$s' n'a pas pu \u00EAtre converti en URL pour la raison suivante \: %2$S
-lutinuitl.error.resource.not.found="La resource '%1$s' n'a pas \u00E9t\u00E9 trouv\u00E9e
-lutinutil.debug.objectutil.create=Essaye de cr\u00E9er %s avec %s
-lutinutil.debug.objectutil.instantiate=Ne peut pas instancier %s avec les param\u00EAtres %s
+lutinuitl.error.convert.file.to.url=Le fichier '%1$s' n'a pas pu \u00eatre converti en URL pour la raison suivante \: %2$S
+lutinuitl.error.resource.not.found=La resource '%1$s' n'a pas \u00e9t\u00e9 trouv\u00e9e
+lutinutil.debug.objectutil.create=Essaye de cr\u00e9er %s avec %s
+lutinutil.debug.objectutil.instantiate=Ne peut pas instancier %s avec les param\u00eatres %s
lutinutil.debug.objectutil.invoke=Invocation de %s avec %s
lutinutil.error.add.url.in.classloader=Can't add url in classloader %1$s for reason %2$s
lutinutil.error.applicationconfig.save=Impossible de sauvegarder le fichier de configuration dans %s
-lutinutil.error.convertor.noValue=Aucune valeur \u00E0 convertir pour le convertisseur %s
-lutinutil.error.get.url.from.zip=Erreur lors de la lecture du fichier compress\u00E9 %1$s \: %2$s
-lutinutil.error.i18n.unformated.message=Le message suivant n''a pas pu \u00EAtre format\u00E9 \: '%s' avec les arguments %s
-lutinutil.error.i18n.unfound.country=n'a pas pu trouver le pays \u00E0 partir de '%s', utilise le pays par d\u00E9faut '%s'
-lutinutil.error.i18n.unfound.language=n'a pas pu trouver la langue \u00E0 partir de '%s', utilise la langue par d\u00E9faut '%s'
-lutinutil.error.i18n.untranslated.message=Le message suivant n'a pas pu \u00EAtre traduit \: '%s'
-lutinutil.error.no.convertor=Aucun convertisseur trouv\u00E9 pour le type %2$s et l''objet '%1$s'
+lutinutil.error.convertor.noValue=Aucune valeur \u00e0 convertir pour le convertisseur %s
+lutinutil.error.get.url.from.zip=Erreur lors de la lecture du fichier compress\u00e9 %1$s \: %2$s
+lutinutil.error.i18n.unformated.message=Le message suivant n''a pas pu \u00eatre format\u00e9 \: '%s' avec les arguments %s
+lutinutil.error.i18n.unfound.country=n'a pas pu trouver le pays \u00e0 partir de '%s', utilise le pays par d\u00e9faut '%s'
+lutinutil.error.i18n.unfound.language=n'a pas pu trouver la langue \u00e0 partir de '%s', utilise la langue par d\u00e9faut '%s'
+lutinutil.error.i18n.untranslated.message=Le message suivant n'a pas pu \u00eatre traduit \: '%s'
+lutinutil.error.no.convertor=Aucun convertisseur trouv\u00e9 pour le type %2$s et l''objet '%1$s'
lutinutil.error.resource.not.found=
-lutinutil.error.unfound.month=n'a pas pu trouv\u00E9 le mois \u00E0 partir de '%s', utilise le mois par d\u00E9faut '%s'
+lutinutil.error.unfound.month=n'a pas pu trouv\u00e9 le mois \u00e0 partir de '%s', utilise le mois par d\u00e9faut '%s'
lutinutil.error.unknown.url.type=could not treate unknown type of url %1$s
-lutinutil.error.url.convertor=Un probl\u00E8me est apparu lors de la convertion en url de '%s' avec le convertisseur %s pour la raison suivante \: %s
-lutinutil.fileCompletion.cancel=.. pour annuler ou pour revenir au repertoire pr\u00E9c\u00E9dent
-lutinutil.fileCompletion.enter=Entrer pour afficher la liste des fichiers, ou pour compl\u00E9ter le chemin
+lutinutil.error.url.convertor=Un probl\u00e8me est apparu lors de la convertion en url de '%s' avec le convertisseur %s pour la raison suivante \: %s
+lutinutil.fileCompletion.cancel=.. pour annuler ou pour revenir au repertoire pr\u00e9c\u00e9dent
+lutinutil.fileCompletion.enter=Entrer pour afficher la liste des fichiers, ou pour compl\u00e9ter le chemin
lutinutil.fileCompletion.exit=Saisir "\!q" pour quitter
lutinutil.fileCompletion.save=Saisir "\!s" a la fin du nom de fichier pour l'enregistrer
lutinutil.month.april=avril
-lutinutil.month.august=ao\u00FBt
-lutinutil.month.december=d\u00E9cembre
-lutinutil.month.february=f\u00E9vrier
+lutinutil.month.august=ao\u00fbt
+lutinutil.month.december=d\u00e9cembre
+lutinutil.month.february=f\u00e9vrier
lutinutil.month.january=janvier
lutinutil.month.july=juillet
lutinutil.month.june=juin