Bonjour,
connaissez vous un moyen rapide de concaténer le contenu de x fichiers .txt dans un seul .txt ?
Ou peut-être existe-t-il une API faisant cela
Merci d'avance![]()
Bonjour,
connaissez vous un moyen rapide de concaténer le contenu de x fichiers .txt dans un seul .txt ?
Ou peut-être existe-t-il une API faisant cela
Merci d'avance![]()
Et bien :
ouvrir un fichier en ecriiture
pour chaque fichier a lire
ecrire son contenu dans le fichier en ecriture
C'est pas sorcier en fait
oui mais j'pense qu'il doit exister une API avec une methode prenant en argument une liste de fichier et le fichier destination, et qui ferait cela non?![]()
Comme dit plus haut ce n'est pas sorcier: En fait le seul point litigieux est (comme toujours) la gestion des erreurs. L'exemple ci-apres ignore simplement les fichiers non presents ( a la manière de 'cat' sous Unix). Un autre comportement serait de ne realiser la concatenation que si toutes les sources peuvent être effectivement lues. Dans ce cas ou pourrait soit utiliser un fichier temporaire (voir File API) ou constituer l'ouput Stream en memoire si on ne craint pas de "OutOfMemoryError" (voir ByteArrayOutputStream)
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
import java.io.OutputStream ;
import java.io.InputStream ;
import java.io.IOException ;
import java.io.FileNotFoundException ;
public class Concatenation
{
public void concatenate(OutputStream outputs, String... sources) throws IOException
{
for ( String source : sources )
{
try
{
FileInputStream inputs = new FileInputStream(source) ;
try
{
while ( inputs.available() > 0 )
{
outputs.write(inputs.read()) ;
}
}
finally { inputs.close() ; }
}
catch (FileNotFoundException exception)
{
System.err.println("Concatenation:Cannot open Source File : "+source) ;
}
catch(IOException exception)
{
throw new IOException("Concatenation:Cannot process Source File '"
+source
+"' due to : "+exception.getMessage()) ;
}
}
return ;
}
public void concatenate(String path , String... sources) throws IOException
{
try
{
FileOutputStream outputs = new FileOutputStream(path) ;
try
{
this.concatenate(outputs,sources) ;
}
finally { outputs.close() ; }
}
catch (FileNotFoundException exception)
{
throw new IOException("Concatenation:Cannot open Output File : "+path) ;
}
return ;
}
public static void main(String... arguments) throws IOException
{
String path = System.getProperty("Concatenation.Output") ;
OutputStream outputs =
(path == null) ? System.out : new FileOutputStream(path) ;
new Concatenation().concatenate(outputs,arguments) ;
}
}
Utilise plutot la méthode transferTo de la classe java.nio.FileChannel : code réduit + traitement plus rapide. Pourquoi encore hésiter ?...
ouais j'connaissait pas c pas mal et facile a utilisé.
Par contre je veut copier tout le contenu du fichier sauf la 1ere ligne.
Il n'y a rien apparament pour sauter une ligne dans l'API non?
Partager