Sources JavaConsultez toutes les sources
Nombre d'auteurs : 29, nombre de sources : 134, création le 13 avril 2013
- Lecteur de fichier .INI
- Compression Zip
- Renommage massif
- Lecture de fichier CSV
- Cacher le password en ligne de commande
- Compter le nombre de fichiers dans un repertoire et afficher le nombre de ligne par fichier
- Lister un répertoire
- Fonctions utilitaires de manipulation de File
- Copie de fichier avec NIO
- Parcours récursif d'une arborescence
- Accéder à des ressources dans un fichier d'archive JAR
- Compression ZIP et GZIP, avec gestion des répertoires
- OutilsString - Formatage de n° de téléphone, sansAccents...
Classe permettant la lecture (pas l'écriture) d'un fichier .INI.
Les espaces sont tolérés entre la clé et le =, et à l'intérieur de la valeur.
Les lignes commençant par un ; sont considérées comme des commentaires ..
Toutes les valeurs doivent appartenir à une section
Compression des fichiers du répertoire courant dans une archive Zip
Renommer automatiquement un grand nombre de fichiers situés dans des sous répertoires et aplanir leur arborescence.
Exemple : mon appareil photo numérique crée un nouveau répertoire à chaque fois que je le mets en marche et remet à zéro le compteur de nommage des images. Je me retrouve avec 50 dossiers ayant chacun des images du même nom.
Ce programme résoud le problème et les copie toutes dans le répertoire courant.
Permet de lire un fichier CSV et d'obtenir les valeurs des cellules.
Possibilité d'écrire également... (à partir d'un fichier pré-existant uniquement).
Possibilité de spécifier le caractère de séparation à la compilation...
Pas de contructeur par défaut. Si des caractères de séparation se trouvent dans les données, ce n'est pas géré (d'où la possibilité de spécifier le caractère, y'en a bien un qui conviendra...)
Utilisation :
CSVFile monFichier =
new
CSVFile
("
C:\\youplaboum.csv
"
);
String valeur =
monFichier.getData
(3
, 5
);
monFichier.setData
(6
,1
, "
Nouvelle
valeur
"
);
monFichier.write
("
C:\\toto.csv
"
);
monFichier =
null
;
Cette classe permet de remplacer chaque caractère alphanumérique du password par le signe "*".
Cette classe permet de compter le nombre de fichiers contenus dans un répertoire et d'afficher par la suite le nombre de lignes contenues dans chaque fichier
import
java.io.*;
public
class
LineCount
{
static
public
void
main
(String args[]) throws
Exception
{
//
Change
the
directory
where
the
count
files
are
existing
File di =
new
File
("
c:/count
"
);
File fl[] =
di.listFiles
();
int
j;
int
count=
0
;
String str=
"
"
;
String totalinfo=
"
"
;
for
(j=
0
; j <
fl.length; j+
+
)
{
System.out.println
("
"
+
fl[j]);
FileInputStream fis =
new
FileInputStream
(fl[j].getCanonicalFile
());
LineNumberReader l =
new
LineNumberReader
(new
BufferedReader
(new
InputStreamReader
(fis)));
while
((str=
l.readLine
())!
=
null
)
{
count =
l.getLineNumber
();
}
System.out.println
(count);
String filename =
fl[j].getName
().toString
();
totalinfo =
filename+
"
-------------
"
+
count;
FileOutputStream file =
new
FileOutputStream
("
c:/one.txt
"
,true
); //
append
PrintStream printtofile =
new
PrintStream
(file);
printtofile.println
(totalinfo);
printtofile.close
();
file.close
();
}
}
}
Cette classe permet de lister les fichiers ainsi que les sous-répertoires contenus dans un répertoire.
public
static
void
main
(String args[]){
try
{
File dir =
new
File
("
d:\\temp
"
);
String[] children =
dir.list
();
if
(children =
=
null
) {
System.out.println
("
Directory
does
not
exist
or
is
not
a
Directory
"
);
}
else
{
for
(int
i=
0
; i //
Get
filename
of
file
or
directory
String filename =
children[i];
System.out.println
(filename);
}
}
//
It
is
also
possible
to
filter
the
list
of
returned
files.
//
This
example
does
not
return
any
files
that
start
with
`.'.
FilenameFilter filter =
new
FilenameFilter
() {
public
boolean
accept
(File dir, String name) {
return
!
name.startsWith
("
.
"
);
}
}
;
children =
dir.list
(filter);
//
The
list
of
files
can
also
be
retrieved
as
File
objects
File[] files =
dir.listFiles
();
//
This
filter
only
returns
directories
FileFilter fileFilter =
new
FileFilter
() {
public
boolean
accept
(File file) {
return
file.isDirectory
();
}
}
;
files =
dir.listFiles
(fileFilter);
}
catch
(Exception ioe){
ioe.printStackTrace
();
}
}
/*
*
FileUtility
*
@author
P.
Thomas
*
-----------------------------------------------------------------------------
Description
Les
quatres
principales
methodes
de
cette
classe
utilitaire
permet
:
-
de
calculer
un
chemin
relatif
à
partir
d'un
répertoire
de
référence
et
du
répertoire
à
relativiser
-
de
supprimer
récursivement
des
répertoires
-
de
copier
un
fichier
-
de
créer
un
fichier
à
un
emplacement
précis
avec
un
nom
défini
à
l'aide
d'un
pattern
du
type
"Out-{0,number,#000}.tmp"
[Cf.
MessageFormat]
-----------------------------------------------------------------------------
*/
package
AltaOcas.Util;
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.text.MessageFormat;
import
java.util.ArrayList;
import
javax.swing.JFileChooser;
public
class
FileUtility {
protected
static
String getPrimaryPath
(File ref, File access) {
String path =
"
"
;
ArrayList refp =
new
ArrayList
();
for
(File cur =
ref; cur !
=
null
; cur =
cur.getParentFile
()) {
String name =
cur.getName
();
if
(name.length
() =
=
0
)
name =
cur.getAbsolutePath
();
refp.add
(name);
//
System.out.println("Ref
:
'"
+
name
+
"'");
}
ArrayList accp =
new
ArrayList
();
for
(File cur =
access; cur !
=
null
; cur =
cur.getParentFile
()) {
String name =
cur.getName
();
if
(name.length
() =
=
0
)
name =
cur.getAbsolutePath
();
accp.add
(name);
//
System.out.println("Acc
:
'"
+
name
+
"'");
}
if
(refp.size
() =
=
0
|
|
accp.size
() =
=
0
)
return
path;
if
(refp.get
(refp.size
()-
1
).equals
(accp.get
(accp.size
()-
1
))) {
boolean
equal =
true
;
while
(equal &
&
refp.size
() >
1
&
&
accp.size
() >
1
) {
refp.remove
(refp.size
()-
1
);
accp.remove
(accp.size
()-
1
);
equal =
(refp.get
(refp.size
()-
1
).equals
(accp.get
(accp.size
()-
1
)));
}
if
(refp.size
() =
=
1
) {
if
(!
equal) {
refp.remove
(refp.size
()-
1
);
path +
=
"
..
"
;
}
else
{
refp.remove
(refp.size
()-
1
);
accp.remove
(accp.size
()-
1
);
path +
=
"
.
"
;
}
}
else
{
if
(equal &
&
accp.size
() =
=
1
) {
refp.remove
(refp.size
()-
1
);
accp.remove
(accp.size
()-
1
);
}
while
(refp.size
() >
0
) {
refp.remove
(refp.size
()-
1
);
path +
=
"
..
"
;
if
(refp.size
() >
0
) path +
=
File.separator;
}
}
while
(accp.size
() >
0
) {
String name =
(String)accp.remove
(accp.size
()-
1
);
path +
=
File.separator;
path +
=
name;
}
}
else
{
try
{
path =
access.getCanonicalPath
();
}
catch
(IOException e) {
path =
access.getAbsolutePath
();
e.printStackTrace
();
}
}
return
path;
}
public
static
String getDiffPath
(File ref, File acc) {
try
{
File cref =
ref.getCanonicalFile
();
File cacc =
acc.getCanonicalFile
();
return
getPrimaryPath
(cref, cacc);
}
catch
(IOException e) {
e.printStackTrace
();
return
getPrimaryPath
(ref, acc);
}
}
public
static
String getDiffPath
(String ref, String acc) {
File fref =
new
File
(ref);
File facc =
new
File
(acc);
return
getDiffPath
(fref, facc);
}
public
static
void
main
(String[] args) {
JFileChooser dlg =
new
JFileChooser
();
dlg.setFileSelectionMode
(JFileChooser.DIRECTORIES_ONLY);
while
(true
) {
if
( dlg.showOpenDialog
(null
)
=
=
JFileChooser.CANCEL_OPTION) return
;
File first =
dlg.getSelectedFile
();
if
(first =
=
null
) return
;
if
( dlg.showOpenDialog
(null
)
=
=
JFileChooser.CANCEL_OPTION) return
;
File last =
dlg.getSelectedFile
();
if
(last =
=
null
) return
;
System.out.println
("
First
Path
:
"
+
first.getPath
());
System.out.println
("
Last
Path
:
"
+
last.getPath
());
System.out.println
("
First
Name
:
"
+
first.getName
());
System.out.println
("
Last
Name
:
"
+
last.getName
());
System.out.println
("
First
AbsolutePath
:
"
+
first.getAbsolutePath
());
System.out.println
("
Last
AbsolutePath
:
"
+
last.getAbsolutePath
());
System.out.println
("
Diff
PrimaryPath
:
"
+
getPrimaryPath
(first, last));
System.out.println
("
--------------------------------------------------\n
"
);
}
}
public
static
void
recursifDelete
(File path) throws
IOException {
if
(!
path.exists
()) throw
new
IOException
(
"
File
not
found
'
"
+
path.getAbsolutePath
() +
"
'
"
);
if
(path.isDirectory
()) {
File[] children =
path.listFiles
();
for
(int
i=
0
; children !
=
null
&
&
i<
children.length; i+
+
)
recursifDelete
(children[i]);
if
(!
path.delete
()) throw
new
IOException
(
"
No
delete
path
'
"
+
path.getAbsolutePath
() +
"
'
"
);
}
else
if
(!
path.delete
()) throw
new
IOException
(
"
No
delete
file
'
"
+
path.getAbsolutePath
() +
"
'
"
);
}
public
static
void
copyFile
(File src, File dest) throws
IOException {
if
(!
src.exists
()) throw
new
IOException
(
"
File
not
found
'
"
+
src.getAbsolutePath
() +
"
'
"
);
BufferedOutputStream out =
new
BufferedOutputStream
(
new
FileOutputStream
(dest));
BufferedInputStream in =
new
BufferedInputStream
(
new
FileInputStream
(src));
byte
[] read =
new
byte
[128
];
int
len =
128
;
while
((len =
in.read
(read)) >
0
)
out.write
(read, 0
, len);
out.flush
();
out.close
();
in.close
();
}
public
static
File createSpecifiedFile
(String path, String pattern, int
base) {
File file =
new
File
(path);
if
(!
file.isDirectory
()) return
null
;
for
(int
cur =
base; ; cur+
+
) {
Object[] args =
{
new
Integer
(cur)}
;
String result =
MessageFormat.format
(pattern, args);
file =
new
File
(path, result);
if
(!
file.exists
())
return
file;
}
}
}
Salut, concernant la copie de fichier, il peut être interressant d'utiliser les Channels de J2SE 1.4 en utilisant ce genre de code
public
static
void
copyFile
(File src, File dest) throws
IOException
{
FileInputStream fis =
new
FileInputStream
(src);
FileOutputStream fos =
new
FileOutputStream
(dest);
java.nio.channels.FileChannel channelSrc =
fis.getChannel
();
java.nio.channels.FileChannel channelDest =
fos.getChannel
();
channelSrc.transferTo
(0
, channelSrc.size
() , channelDest);
fis.close
();
fos.close
();
}
La méthode getFilesRec() permet de parcourir récursivement toute une arborescence et remplit une ArrayList avec les fichiers trouvés. Les autres méthodes de la classe ShowFiles sont uniquement là pour tester la méthode getFileRec().
//
Updates:
2004.09.27
import
java.io.*;
import
java.util.*;
public
class
ShowFiles {
public
ShowFiles
() {
ArrayList allFiles =
new
ArrayList
();
getFilesRec
(allFiles, "
.
"
);
for
(int
i =
0
; i <
allFiles.size
(); i+
+
) {
System.out.println
(allFiles.get
(i));
}
}
public
static
void
main
(String[] args) {
new
ShowFiles
();
}
private
void
getFilesRec
(ArrayList allFiles, String root) {
File f =
new
File
(root);
File[] listFiles =
f.listFiles
();
for
(int
i =
0
; i <
listFiles.length; i+
+
) {
if
(listFiles[i].isDirectory
()) getFilesRec
(allFiles, listFiles[i].toString
());
else
allFiles.add
(listFiles[i].toString
());
}
}
}
Ces bouts de codes permettent d'accéder à des ressources qui se trouvent dans le même fichier jar que l'application qui les sollicite
//
Lire
un
fichier
de
propriétés
se
trouvant
dans
le
fichier
jar
de
l'application
Properties props =
new
Properties
();
props.load
(ClassLoader.getSystemResourceAsStream
("
Records.properties
"
));
//
Lire
un
fichier
texte
se
trouvant
dans
le
fichier
jar
de
l'application
private
String readFile
(String filename) {
try
{
DataInputStream dis =
new
DataInputStream
(ClassLoader.getSystemResourceAsStream
(filename));
byte
[] data =
new
byte
[dis.available
()];
dis.readFully
(data);
dis.close
();
return
(new
String
(data));
}
catch
(IOException ioe) {
System.out.println
(ioe);
}
return
"
"
;
}
//
Changer
l'icône
d'une
JFrame
lorsque
l'image
à
afficher
se
trouve
dans
le
//
fichier
jar
de
l'application
JFrame f =
new
JFrame
();
f.setIconImage
(new
ImageIcon
(getClass
().getResource
("
icon.png
"
)).getImage
());
Cette classe complète le code fournit par Cyberzoïde, son tuto m'a aidé, et je l'en remerci. Mais voilà, ma classe permet de gérer les arborescences dans la compression et la décompression.
Le formatage de numéros de téléphones... :
Il permet d'uniformiser des numéros qui se retrouvent avec des séparations (espaces, point, -) ou sans séparation, les numéros internationaux (+34... ou 0034... entre parenthèses)
isNumeroTelValide test si après formatage, le numéro est correct pour être numérotable -en appelant formatTelSansPoints- par un serveur de fax par exemple.
sansAccent
Une fonction est déjà proposée dans les codes sources java, celle-ci est plus simple (une ligne). ça se trouve elle provient de la FAQ Java... je sais plus où j'ai vu le code traîner, donc je le partage