Dateiinhalt wird nicht in String eingelesen

tklenin

Mitglied
Hallo Leute,
folgender Code soll eigentlich den Inhalt einer 447 KB großen Datei in einen String einlesen. Tut er aber nicht. Ich bekomme weder einen Fehler noch sonstwas verwertbares. Der Debugger in Netbeans bleibt einfach stehen:
12133

Hier der Code. Das Kuriose: Derselbe Aufruf der Methode etwas früher mit einer einzelnen Datei als Parameter funktioniert reibungslos:
Java:
          for (int i = 0; i < arrayOfNewFiles.length; i++) {
                /*ToDo: jedes einzelne Element decodieren*/
                try {
                    filename = arrayOfNewFiles[i].toString();
                    oldContentOfFile = this.readFile(filename);
                    newContentOfFile = this.decodeText(oldContentOfFile, codeFormat);
                } catch (IOException e) {
                    this.logger.error(e);
                    e.printStackTrace();
                }
                try {
                    arrayOfNewFiles[i].delete();
                    arrayOfNewFiles[i].createNewFile();
                    PrintWriter writer = new PrintWriter(arrayOfNewFiles[i]);
                    writer.println(newContentOfFile);
                    writer.flush();
                } catch (IOException e) {
                    this.logger.error("Fehler während der Erstellung der Datei:" + file.toString() + newline + e);
                }
            }
Hier die Methode:
Java:
    private String readFile(String path) throws IOException {
        String readString = "", giveBackString = "";
        try {
            BufferedReader in = new BufferedReader(new FileReader(path));
            try {
                while ((readString = in.readLine()) != null) {
                    giveBackString += readString;
                }
                in.close();
            } catch (IOException e) {
                System.out.println("Read error " + e);
            }
        } catch (IOException e) {
            System.out.println("Open error " + e);
        }
        return giveBackString;
    }
 
Hm... evtl. schlägt der Garbage Collector mit voller Wucht zu.

Wenn Du Java 8 verwenden darfst, dann kannst Du mal folgendes probieren:
Java:
import static java.util.stream.Collectors.*;

// ...

    private String readFile(String path) {
        try(BufferedReader in = new BufferedReader(new FileReader(path))) {
            return in.lines().collect(joining());
        } catch (IOException ex) {
            System.out.println("I/O error " + e);
            return "";
        }
    }
 
Ich kann bis maximal JDK 1.5 gehen. Alle neueren Klassenmethoden fallen damit brach. Das ist das Kernproblem. Mit dieser Methode klappts jetzt:
Java:
    private String readFiles(String path) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(path));
        StringBuilder sb = new StringBuilder();
        String line,strFile;
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        strFile = sb.toString();
        br.close();
        return strFile;
    }
 
Ich würde das try/catch (und auch finally) direkt in die readFiles Methode einbauen. Man möge mich verbessern falls ich falsch liege, aber sollte eine IOException auftreten würde die Resource sonst nicht geschlossen werden können.
 

Zurück
Oben