2010-01-12 16 views
5

Wie würde ich eine .txt-Datei in Java lesen und jede Zeile in ein Array schreiben, wenn jede Zeile Integer, Strings und Double enthält? Und jede Zeile hat unterschiedliche Mengen an Wörtern/Zahlen.Eine Textdatei in Java lesen

Ich bin ein komplettes noob in Java so tut mir leid, wenn diese Frage ein bisschen dumm ist.

Dank

+1

Bitte präzisieren Sie in Ihrer Frage, was genau wollen Sie mit jeder Linie tun? –

+0

Diese Frage sollte Ihnen helfen: http://StackOverflow.com/Questions/224952 –

+0

@ Fabian Steeg: Die Frage, die Sie verlinkt, behandelt nicht den Umgang mit verschiedenen Datentypen wie dieser tut. – Powerlord

Antwort

2

Ihre Frage ist nicht ganz klar, so dass ich nur für das „Lesen“ Teil beantworten:

List<String> lines = new ArrayList<String>(); 
BufferedReader br = new BufferedReader(new FileReader("fileName")); 
String line = br.readLine(); 
while (line != null) 
{ 
    lines.add(line); 
    line = br.readLine(); 
} 
+2

Sie vergessen br.close() –

11

Versuchen Sie, die Scanner Klasse, die niemand kennt, aber alles tun kann fast mit Text.

Um einen Leser für eine Datei zu erhalten, verwenden

File file = new File ("...path..."); 
String encoding = "...."; // Encoding of your file 
Reader reader = new BufferedReader (new InputStreamReader (
    new FileInputStream (file), encoding)); 

... use reader ... 

reader.close(); 

Sie wirklich die Codierung oder sonst werden Sie seltsame Ergebnisse erhalten, wenn Sie begegnen Umlaute, Unicode und dergleichen angeben sollten.

+0

+1 für den Hinweis Scanner. Ich hatte vorher noch nichts davon gehört. Interessante Klasse. – JasCav

+1

"Niemand kennt Scanner". Atleast hielt für mich wahr. Der Scanner kann auch verwendet werden als: Scanner sc = neuer Scanner (neue Datei ("fileName")); // irgendeine Idee, warum man es nicht so benutzen sollte? – sttaq

+0

@sttaq: Weil das die Standardcodierung verwendet. Verwenden Sie beim Lesen von Daten niemals die Standardcodierung. Finden Sie immer heraus, um was für eine Eingabe es sich handelt, oder geben Sie an, welche Kodierung Ihr Code akzeptiert. Wie auch immer, nageln Sie es auf etwas Bestimmtes an. –

6

Am einfachsten ist es, einfach das Apache Commons IO JAR zu verwenden und die Klasse org.apache.commons.io.FileUtils zu importieren. Es gibt viele Möglichkeiten, wenn diese Klasse verwendet wird, aber das offensichtlichste wäre wie folgt;

List<String> lines = FileUtils.readLines(new File("untitled.txt")); 

Es ist so einfach.

"Erfinden Sie das Rad nicht neu."

1

Häufig verwendet:

String line = null; 
    File file = new File("readme.txt"); 

    FileReader fr = null; 
    try 
    { 
     fr = new FileReader(file); 
    } 
    catch (FileNotFoundException e) 
    { 
     System.out.println("File doesn't exists"); 
     e.printStackTrace(); 
    } 
    BufferedReader br = new BufferedReader(fr); 

    try 
    { 
     while((line = br.readLine()) != null) 
    { 
     System.out.println(line); 
    } 
+1

Willkommen bei Stack Overflow! Danke für deinen Beitrag! Bitte verwenden Sie keine Signaturen/Taglines in Ihren Beiträgen. Ihre Benutzerbox gilt als Ihre Unterschrift, und Sie können Ihr Profil verwenden, um Informationen über sich selbst zu veröffentlichen. [FAQ zu Unterschriften/Slogans] (http://stackoverflow.com/faq#signatures) Bitte geben Sie die URL Ihrer Website nicht an, da Ihre Posts möglicherweise als Spam gekennzeichnet werden. –

0

@ user248921 vor allem, kann man alles in String-Array speichern, so können Sie String-Array machen und eine Linie in Array und Gebrauchswert in Code speichern, wann immer Sie wollen . Sie können den folgenden Code verwenden, um heterogene Zeilen (mit String, int, boolean usw.) im Array zu speichern.

public class user { 
public static void main(String x[]) throws IOException{ 
    BufferedReader b=new BufferedReader(new FileReader("<path to file>")); 
    String[] user=new String[500]; 
    String line=""; 
    while ((line = b.readLine()) != null) { 
    user[i]=line; 
    System.out.println(user[1]); 
    i++; 
    } 

} 
}