habe schon eine ganze Weile gegoogelt, bin aber nicht so recht weiter gekommen.
Ich möchte eine Textdatei in ein Array einlesen. Dieses Array dann weiter nach bestimmten String-Werten durchsuchen...
Wie muss ich vorgehen? Ein bischen Code wäre super.
Ich habe mal ein kleines Programm zur Demonstration geschrieben.
Textdatei auslesen und die einzelnen Worte in einem Array speichern:
Code:
import java.io.*;
public class DateiInArrayEinLesen {
private StringBuilder sb;
private String[] list; //String-Array zur Aufnahme des Textes
public DateiInArrayEinLesen() {
sb = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new FileReader("TestDatei.txt"));
String str;
while((str = in.readLine()) != null) {
sb.append(str); //zeilenweise
sb.append("\n");
}
str = sb.toString();
System.out.println("Folgender Text wurde eingelesen:\n"+str);
list = str.split(" "); //Regex u. U. noch anpassen!
System.out.println("Wortliste:");
for(int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
}
catch(FileNotFoundException fnfe) {
System.out.println("Datei nicht gefunden!");
}
catch(IOException ioe) {
System.out.println("Fehler beim Lesen!");
}
}
public static void main(String[] args) {
new DateiInArrayEinLesen();
}
}
Und ich dachte schon, ich wäre schwer von Begriff.
Ich habs mir schon fast abgewöhnt auf solche "Fragen" zu antworten...
@Cyberboy_2005: ...selbst schuld.
Also nochmal, meine Frage war auf das oben angeführte Programm bezogen. Ich möchte eine Textdatei Zeilenweise auslesen, so wie es oben auch gemacht wird. Allerdings möchte ich es nicht sofort wieder Zeilenweise auf dem Bildschirm ausgeben, sondern in einem Array speichern und bei bedarf einzelne Zeilen aus dem Array wieder bei Bedarf ausgeben. Wie mache ich das...und wie kann ich z.B. auf den 3. Eintrag also die dritte eingelesene Zeile zugreifen....hoffe es war jetzt etwas verständlicher!!!
Array ist schonmal nicht so gut, da du wahr. nicht weiß wieviele Zeilen du einlesen musst... arrays sind statisch und können nur eine feste Größe haben.
Nimm eine Liste (z.b. ArrayList). Les zeilenweise ein und speichere jede Zeile in der Liste. Später kannst du dann über indexbasierten Zugriff auf die Liste die entsprechende Zeile holen
Sorry...bekomme das aber irgendwie nicht hin....stehe total auf dem Schlauch!!!!
Habe dieses Programm:
Code:
import java.io.*;
public class DateiInArrayEinLesen {
private StringBuilder sb;
private String[] list; //String-Array zur Aufnahme des Textes
public DateiInArrayEinLesen() {
sb = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new FileReader("TestDatei.txt"));
String str;
while((str = in.readLine()) != null) {
sb.append(str); //zeilenweise
sb.append("\n");
}
str = sb.toString();
System.out.println("Folgender Text wurde eingelesen:\n"+str);
list = str.split(" "); //Regex u. U. noch anpassen!
System.out.println("Wortliste:");
for(int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
}
catch(FileNotFoundException fnfe) {
System.out.println("Datei nicht gefunden!");
}
catch(IOException ioe) {
System.out.println("Fehler beim Lesen!");
}
}
public static void main(String[] args) {
new DateiInArrayEinLesen();
}
}
Lese diese Textdatei ein:
eins
zwei
drei
vier
fünf
sechs
sieben
acht
neun
zehn
Ich kann also sagen wie viele Zeilen ich einlesen will!!!
Ich möchte es aber nicht eins zu eins auf dem Bildschirm ausgeben, sondern beliebig, indem ich mir selber die Zeile aussuche die ausgegeben werden soll. Z.B. möchte ich nur die 4. Zeile ausgeben. Wie speicher ich es also in z.B. einem Array/ArrayList und wie kann ich einzelne Teile darin ansprechen und ausgeben???
SORRY für meine Blödheit...aber wir sind ja hier im Anfängerforum....also bitte Antworten die selbst ich noch verstehe und nicht nur Denkanstöße für Leute mit Erfahrung!!!!
Genau das habe ich ja auch gedacht...hat allerdings nicht funktioniert...sonst würde ich hier ja nicht nerven wenn es so einfach ist...und wenn es bei dir funzt..poste mal bitte Deinen genauen SourceCode!!!!
Weil die Beteiligten hier so oft nachfragen mussten, bis du klargemacht hast, was du wolltest!
Und die restlichen Posts sind dazu da deine "Blödheit" zu überwinden.
Ich geh' jede Wette ein, dass du nicht einmal in die API geguckt hast, es ist am Anfang nicht leicht, direkt die API zu verwenden, aber den Gebrauch einer ArrayList kann man da schon ganz gut ablesen!
Auf der einen Seite kann ich euch ja verstehen, aber auf der anderen Seite frage ich mich immer, wieso manche Leute solche Sinnlosen Kommentare / Runtermachungen posten. Wenn sie es nicht interessiert, sollen sie einfach nichts posten und wenn sie mir helfen wollen, wofür ich auch jedem danke, sollen sie es machen.
[Edit by Beni: code und quote-Tags verschoben, damit die Page nicht 5000 Pixel Breite benötigt.]
Ich habe die Methode da oben benutzt aber ich habe das Problem das meine Textdatei nicht gefunden werden kann, ich habe schon versucht mit Pfadangaben versucht aber es hilft nicht .
Die Fehlermeldung bekomm ich noch nachdem ich erfahre das die Datei nicht gefunden werden kann.
Exception in thread "main" java.lang.NullPointerException
at configRreader.<init>(configRreader.java:38 )
at Main.main(Main.java:8 )
Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class configRreader {
/**
* @param args
*/
StringBuilder sb;
String[] list; //CFG Datei Zeilenweise
String[] mnuname = new String[100];
String[] mnutitle = new String[100];
String[][][] btninf = new String[100][100][2];
public configRreader(){
sb = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new FileReader("config.txt"));
String str;
while((str = in.readLine()) != null) {
sb.append(str); //zeilenweise
sb.append("\n");
}
str = sb.toString();
list = str.split(" ");
for(int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
}
catch(FileNotFoundException fnfe) {
System.out.println("Datei nicht gefunden!");
}
catch(IOException ioe) {
System.out.println("Fehler beim Lesen!");
}
//Textdatei Zeilenweise ausgelesen und in Stringarray gespeichert
int x=0, count=0, mnucount=0, numlist=list.length;
//String mnuname[100]="", mnutitle[100]="";
//String btninf[100][10][2]="";
while (numlist!=count){
if (list[x].substring(0,1)=="mnu"){
mnuname[mnucount]=list[x].substring(0,4);
mnutitle[mnucount]=list[x].substring(4,list[x].length());
mnucount++;
x++;
}
else if (list[x].substring(0,4)=="btn"){
btninf[mnucount][list[x].charAt(3)][1]=list[x].substring(0,4);
btninf[mnucount][list[x].charAt(3)][2]=list[x].substring(4,list[x].length());
btninf[mnucount][list[x].charAt(3)][3]=list[x+1];
x++;
}
else{
x++;
}
}
}
}
PS: Ja ich weiss ich hab Reader falsch geschrieben .
1. Strings vergleicht man nicht per == ! Es sind Objekte, also vergleich per equals
2. Was willst du machen ? ein einfaches ConfigFile auslesen ? Dann benutz BITTE eine Properties datei und nutze die Klasse Properties (wenn du nicht weißt wie sie funktioniert schau dir die API an !!). Damit ist das ganze ein 2 oder 3 Zeiler !!
ja dann wurde wohl die Datei nicht gefunden und damit bleibt die Variable "list" null und es gibt folglich bei "numlist=list.length" eine NullPointerException. Wo liegt denn die Datei und welche Pfade hast du schon probiert ?
ja dann wurde wohl die Datei nicht gefunden und damit bleibt die Variable "list" null und es gibt folglich bei "numlist=list.length" eine NullPointerException. Wo liegt denn die Datei und welche Pfade hast du schon probiert ?
Die Datei liegt in dem gleichen Ordner wie die java-Dateien und auf C:\ .
Ich hab folgende Eingaben versucht.
"config.txt"
"C:/0092config.txt"
"C:"+"/0092"+"config.txt"
@deathbyaclown:
1: Ist mir leider entfallen danke für den Tip.
2: Properties kannte ich noch nicht, werd mich aber wohl jetzt damit beschäftigen(bzw. tuhe ich es schon).
wenn die Datei "0092config.txt" tatsächlich im Verzeichnis "c:\" lag, hätte das so funktionieren müssen :bahnhof:
Und die Properties funktionieren auch nur dann, wenn die Datei gefunden wird
Ich hatte das /0092 eigentlich wegen dem ASCI Code gemacht und es nun nochmal mit:
"C:/config.txt" versucht, ein anderen Datenträger ausprobiert und den Namen der Datei geändert aber es hilft alles nicht .
dann müsstest du nochmal genau dokumentieren, was du gemacht hast. Ich hab mal eben deinen Code genommen, als Datei "c:/config.txt" eingetragen, ebendort eine solche Datei erstellt und ab die Post. Funktioniert problemlos, hatte nur irgend eine StringIndexOutOfBoundsException, da in meiner Test-Datei nur Murks drin stand.
Hab grad den Fehler gefunden, die Endungen bekannter Dateien wurden bei mir automatisch ausgeblendet so das der Dateipfad "C:/config.txt.txt" lautete .
Naja herzlichen Dank für die Hilfe.