2012-05-10 5 views
1

Je veux écrire un programme java simple à lire dans un fichier texte, puis écrire un nouveau fichier chaque fois qu'une ligne vide est détectée. J'ai vu des exemples pour lire dans des fichiers mais je ne sais pas comment détecter la ligne vide et produire plusieurs fichiers texte.Java lu dans un fichier unique et écrire plusieurs fichiers

fileIn.txt:

line1 
line2 

line3 

fileOut1.txt:

line1 
line2 

fileOut2.txt:

line3 

Répondre

1

Juste au cas où votre dossier a caractères spéciaux, peut-être vous devez spécifier le codage .

FileInputStream inputStream = new FileInputStream(new File("fileIn.txt")); 
InputStreamReader streamReader = new InputStreamReader(inputStream, "UTF-8"); 
BufferedReader reader = new BufferedReader(streamReader); 
int n = 0; 
PrintWriter out = new PrintWriter("fileOut" + ++n + ".txt", "UTF-8"); 
for (String line;(line = reader.readLine()) != null;) { 
    if (line.trim().isEmpty()) { 
     out.flush(); 
     out.close(); 
     out = new PrintWriter("file" + ++n + ".txt", "UTF-8"); 
    } else { 
     out.println(line); 
    } 
} 
out.flush(); 
out.close(); 
reader.close(); 
streamReader.close(); 
inputStream.close(); 
+0

C'était très utile. Merci! Cependant, je ne comprends pas vraiment la boucle for. Je suis habitué au for (initialisation, termination, increment). Pourquoi n'est-ce pas String line = null; et il n'y a pas d'augmentation? – yellavon

+0

Sont facultatifs. Vous ne pouvez avoir que 'for (;;)' –

1

Vous pouvez détecter une chaîne vide pour savoir si une ligne est vide ou non. Par exemple:

if(str!=null && str.trim().length()==0) 

Ou vous pouvez faire (si vous utilisez JDK 1.6 ou version ultérieure)

if(str!=null && str.isEmpty()) 
+0

Vos deux conditions ne sont pas équivalentes. 'isEmpty()' ne vérifie que la longueur, il ne coupe pas précédemment –

+0

@GuillaumePolet - C'était un oubli de ma part. Ajouté le chèque nul aussi! – CoolBeans

1

Je ne sais pas comment détecter la ligne blanche ..

if (line.trim().length==0) { // perform 'new File' behavior 

.. et de générer plusieurs fichiers texte.

Faire ce qui est fait pour un seul fichier, dans une boucle.

0
BufferedReader br = new BufferedReader(new FileReader("test.txt")); 
String line; 
int empty = 0; 
while ((line = br.readLine()) != null) { 
if (line.trim().isEmpty()) { 
// Line is empty 
} 
} 

L'extrait de code ci-dessus peut être utilisé pour détecter si la ligne est vide et à ce moment vous pouvez créer FileWriter d'écrire au nouveau fichier.

0

Quelque chose comme cela devrait faire:

public static void main(String[] args) throws Exception { 
     writeToMultipleFiles("src/main/resources/fileIn.txt", "src/main/resources/fileOut.txt"); 
    } 

    private static void writeToMultipleFiles(String fileIn, String fileOut) throws Exception {  

     BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(fileIn)))); 
     String line; 
     int counter = 0; 
     BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileOut)))); 

     while((line=br.readLine())!=null){ 

      if(line.trim().length()!=0){ 
       wr.write(line); 
       wr.write("\n"); 
      }else{ 
       wr.close(); 
       wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileOut + counter))); 
       wr.write(line); 
       wr.write("\n"); 
      } 
      counter++; 
     } 

     wr.close(); 
    } 
Questions connexes