2017-03-07 2 views
1

Im essayant de fusionner deux documents doc_a et doc_b dans un troisième document dire doc_c avec l'être résultat souhaité:Fusionner deux documents linewise

content doc_a: line1 
       line2 

content doc_b: line3 
       line4 

content doc_c: line1 line3 
       line2 line4 

Mon approche est similaire à ceci:

public static void mergeTrain(File src1, File src2, File dest) throws IOException{  

    Files.copy(src1.toPath(), dest.toPath()); 

    BufferedReader br = new BufferedReader(new FileReader(src2)); 
    BufferedWriter bw = new BufferedWriter(new FileWriter(dest,true)); 

    String line = new String("Platzhalter"); 
    try { 
     while(line != null){ 
      line = br.readLine(); 
      if (line !=null){    
       bw.append(line); 
       } 
      } 
     } 
    } catch (NumberFormatException e) { 
     e.printStackTrace(); 
    } 
    br.close(); 
    bw.close(); 
} 

Comme un résultat j'opte à la place:

content doc_c: line1 
       line2 line3 line4 

Comment puis-je obtenir le résultat souhaité?

Répondre

1

Vous copiez actuellement le contenu de src1 dans le fichier de destination dest, puis vous ajoutez toutes les lignes du fichier src2 - et c'est exactement ce que vous obtenez. Que diriez-vous de faire ce que vous avez réellement expliqué?

Que diriez-vous ceci:

public static void mergeTrain(File src1, File src2, File dest) throws IOException {  

    BufferedReader br1 = new BufferedReader(new FileReader(src1)); 
    BufferedReader br2 = new BufferedReader(new FileReader(src2)); 
    BufferedWriter bw = new BufferedWriter(new FileWriter(dest,true)); 

    String line1; 
    String line2; 

    try { 
     while((line1 = br1.readLine()) != null 
      && (line2 = br2.readLine()) != null) {    
      bw.append(line1 + " " + line2); 
      bw.newLine(); 
     } 
    } catch (NumberFormatException e) { 
     e.printStackTrace(); 
    } 

    br1.close(); 
    br2.close(); 
    bw.close(); 
} 

Je n'ai pas testé le code, mais vous devriez avoir l'idée au moins. Notez que vous devrez réfléchir à ce que vous voulez faire si les deux fichiers ont un nombre de lignes différent.

+0

Remarque: Je ne pense pas que 'NumberFormatException' appartient réellement à cet emplacement. Je viens de copier cela à partir de votre code d'origine. – domsson

1

Il est préférable d'analyser les deux fichiers d'entrée ensemble. Notez également que les deux fichiers peuvent avoir une longueur différente.

public static void mergeTrain(File src1, File src2, File dest) throws IOException{  
BufferedReader br1 = new BufferedReader(new FileReader(src1)); 
BufferedReader br2 = new BufferedReader(new FileReader(src2)); 
BufferedWriter bw = new BufferedWriter(new FileWriter(dest,true)); 

String line1 = ""; 
String line2 = ""; 
try { 
    while(line1 != null || line2!=null){ 
     line1 = line1 !=null && br1.readLine(); 
     line2 = line2 != null && br2.readLine(); 
     if (line1 !=null) && (line2!=null){    
      bw.append(line1).append(" ").append(line2).append("\n"); 
      } 
     } else if (line1!=null) { 
      bw.append(line1).append("\n");   
     } else if (line2!=null) { 
      bw.append(line2).append("\n");    
     } 
    } 
    br1.close(); 
    br2.close(); 
    bw.close(); 


} catch (IOException e) { 
    e.printStackTrace(); 
} 
}