Textdateien mit Java
Zurzeit programmiere ich wieder viel in Java. Ein Problem das man immer mal wieder hat: Textdateien einlesen. Erstaunlicherweise kann man dabei wahnsinnig viele unterschiedliche Methoden verwenden. Die meisten sind schlecht, unschön und sehr, sehr langsam…
Ein modifiziertes Beispiel aus den Weiten des Internets, das zwar eine Textdatei einliest, sich aber dabei ziemlich viel Zeit lässt:
/** * Load a text file in a string. * @param file text file * @return string containing the text * @throws IOException */ public static String loadTextFile(File file) throws IOException { BufferedReader in = new BufferedReader(new FileReader(file)); String result = ""; boolean linesLeft = true; while (linesLeft) { String str = in.readLine(); if (str != null) { result += str + "\n"; } else { linesLeft = false; } } in.close(); return result; }
Da ich öfters Textdateien einlesen muss, habe ich mir eine kleine Klasse zu diesem Thema geschrieben. Das Einlesen geht wesentlich schneller als im oberen Beispiel. Ich schätze, dies ist so ziemlich das Maximum an Performance, was man mit relativ geringen Aufwand aus Java kitzeln kann. Nebenbei bemerkt ist die Methode auch wesentlich kompakter und lesbarer!
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * Utility class for loading and saving text files. */ public class TextFileUtilities { /** * Write a string to a file. * * @param text text to save * @param file file to save text to * @throws IOException */ public static void saveTextFile(String text, File file) throws IOException { FileWriter fileWriter = new FileWriter(file); fileWriter.write(text); fileWriter.flush(); fileWriter.close(); } /** * Read the content of a text file. * * @param file text file * @return content of text file * @throws IOException */ public static String loadTextFile(File file) throws IOException { BufferedReader reader = new BufferedReader( new FileReader(file) ); char[] chars = new char[ (int)file.length() ]; reader.read(chars); reader.close(); return new String(chars); } }
Tags: Coding, Java, Tipps & Tricks