2017-09-17 2 views
1

Ich habe ein Java-Programm geschrieben, aus einer TXT-Datei Zeile für Zeile zu lesen, einen bestimmten Wert in einer Zeile zu finden, bearbeiten Sie es und schreiben Sie alle Zeilen in eine neue Datei. z:Java Heap Space Programm Leistung

Input: 
4563,9876,abc545 

Output: 
4563,9876_1,abc545 

ich das Programm von meiner Eingabeaufforderung ausgeführt wird, und ich bin in der Lage 1 Million Datensätze zu behandeln. Aber wenn ich ein bisschen mehr behandle, bekomme ich den untenstehenden Fehler:

Ich habe versucht, es zu sortieren, aber ohne Erfolg. Unten finden Sie meine Java-Klasse. Kann ich einige Vorschläge dazu erhalten, wie ich meinen Code verbessern kann, um mehr Datensätze zu bearbeiten?

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Arrays; 

class RecordTreatment { 
    public static void main(String args[]) throws IOException 
    { 
       // Open the file 
       File file = new File("C:\\Users\\tolen\\Desktop\\test.txt"); 
       FileInputStream fstream = new FileInputStream(file); 
       BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
       StringBuilder fileContent = new StringBuilder(); 
       String strLine; 
       int counter=1; 
       //Read File Line By Line 
       while ((strLine = br.readLine()) != null) { 
        String tokens[] = strLine.split(","); 
        if (tokens.length > 0) { 
          String tokens1[] = tokens[16].split("\""); 
          tokens[16] ="\""+tokens1[1] + "_"+counter+++"\""; 
          for (int i = 0; i < tokens.length; i++) { 
           if (tokens[i].equals(tokens[tokens.length-1])) { 
            fileContent.append(tokens[i]); 
           }else{ 
            fileContent.append(tokens[i]+","); 
            } 
           } 
          fileContent.append("\n"); 
        } 
       } 
       FileWriter fstreamWrite = new FileWriter("C:\\Users\\tolen\\Desktop\\test1.txt"); 
       BufferedWriter out = new BufferedWriter(fstreamWrite); 
       out.write(fileContent.toString()); 
       out.close(); 
       //Close the input stream 
       br.close(); 
    } 
} 

Antwort

1
class RecordTreatment { 
    public static void main(String args[]) throws IOException 
    { 
     // Open the file 
     File file = new File("C:\\Users\\tolen\\Desktop\\test.txt"); 
     FileInputStream fstream = new FileInputStream(file); 
     BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
     FileWriter fstreamWrite = new FileWriter("C:\\Users\\tolen\\Desktop\\test1.txt"); 
     BufferedWriter out = new BufferedWriter(fstreamWrite); 

     String strLine; 
     int counter=1; 
     //Read File Line By Line 
     while ((strLine = br.readLine()) != null) { 
      String tokens[] = strLine.split(","); 
      if (tokens.length > 0) { 
       String sub_tokens[] = tokens[16].split("\""); 
       tokens[16] = String.format("\"{}_{}",sub_tokens[1],counter); 
       out.write(String.join(",",tokens)); 
       out.write("\n"); 
      } 
     } 

     out.close(); 
     br.close(); 
    } 
} 
+0

Können Sie mir bitte Ihre Änderung erklären? –

+0

@JohnDoe Sicher, aber zuerst bitte löschen Sie, wenn Sie ** eine Zeile ersetzen wollen oder ** extrahieren ** dann eine Zeile ersetzen. – Ben

+0

Ich möchte nur einen Wert in jeder Zeile bearbeiten/ersetzen –

0

Sie haben nicht genügend Arbeitsspeicher, weil Sie die gesamte Datei gleichzeitig in diesen StringBuilder einlesen. Können Sie stattdessen versuchen, an Ihre Ausgabedatei anzuhängen, während Sie die Zeilen der Eingabedatei in dieser While-Schleife einlesen?

0

erstellen StringBuilder innerhalb while Schleife und schreiben Sie es in die Datei in jeder Schleife und schließen Sie die Verbindung zu BufferedWriter out nach der while Schleife.

Dies geschieht, weil StringBuilder Objekt, das Sie haben, alle Daten in der Datei während der Schleife speichert. Here Sie haben eine Antwort auf eine ähnliche Frage. Schau es dir auch an.

Verwandte Themen