String array

edsie2011

Aktives Mitglied
Hallo ich wollte aus einer txt Datei string array lesen was aber nicht so klappt.
Bräuchte etwas hilfe.

Java:
private String PathUsers = "F:\\twitter\\user.txt"; 
File lg = new File ( PathUsers )
{
	 BufferedReader abc = new BufferedReader(new FileReader("F:\\twitter\\user.txt"));
	 while (abc.readLine() == 1){// hier kommt ein fehler!!
		 String[] Benutzer = abc.readLine().split(";");
	 }
	 
 }

Der soll aus einer Text Datei
ID;Ben;PWD;
ID;Ben2;PWD;
...
 
while (abc.readLine() == 1){// hier kommt ein fehler!!

Was liefert denn readLine zurück? Richtig einen String, und damit ist der Vergleich mit 1 falsch!
p.s.: readLine liest wirklich eine Zeile, d.h. du würdest hier Zeilen verschlucken, da du mit diesen ja nichts weiter machst!
 
Java:
private String PathUsers = "F:\\twitter\\user.txt"; 
File lg = new File ( PathUsers )
{
	 BufferedReader abc = new BufferedReader(new FileReader("F:\\twitter\\user.txt"));
	 List<String> benutzer = new ArrayList<String>();
	 String newLine = " ";
	 while (newLine != null) {
		 newLine = abc.readLine();
	 	 if(newLine != null) {
	 	 	 benutzer.add(newLine);
	 	 }
	 }
	 String[] benutzerArr = (String[]) benutzer.toArray();
 }

Versuchs so....
 
Bräuchte etwas hilfe.

Ich verstehe nicht warum es dir Leute immer so schwer machen? Ich gibt doch im Netz mindestens eine Million Beispiele wie man eine Textdatei zeilenweise einlesen kann.

z.B. so:

Java:
	try {
		BufferedReader in = new BufferedReader(new FileReader("text.txt"));
		String zeile = null;
		while ((zeile = in.readLine()) != null) {
			System.out.println("Gelesene Zeile: " + zeile);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
 
@Gossi:
Auch da sind zwei readLines() drin, da wird ebenfalls jede zweite Zeile verschluckt.

Wenn du mir jetzt sagen könntest wo dort bitte das zweite ist :bahnhof:

@ eraaaa

So besser? ^^

Java:
private String PathUsers = "F:\\twitter\\user.txt"; 
File lg = new File ( PathUsers )
{
     BufferedReader abc = new BufferedReader(new FileReader("F:\\twitter\\user.txt"));
     List<String> benutzer = new ArrayList<String>();
     String newLine = abc.readLine();
     while (newLine != null) {
          benutzer.add(newLine);
          newLine = abc.readLine();
     }
     String[] benutzerArr = benutzer.toArray(new String[0]);
 }
 
lerne von nun an: Syntaxfehler beziehen sich meist auf das große Ganze, 20 Zeilen vorher oder nachher kann eine Klammer fehlen,
der Compiler könnte schlauer warnen, aber das Glück besteht eben zur Zeit nicht

siehe
java - Syntax error on token ";", { expected after this token - Stack Overflow
oder andere Ergebnisse bei Eingabe der Fehlermeldung in Suchmaschinen


"after this token" ist freilich ein gar nicht so schlechter Hinweis, dass es um die NÄCHSTE Zeile geht
 
Das ist eine Gute Frage.
@ eRaaaa
Ne Exception?
Ja dein Cast würde eine ClassCastException ergeben!
Java:
		   List<String> benutzer = new ArrayList<String>(Arrays.asList("Hallo","Exception"));
		//   String[] benutzerArr = (String[]) benutzer.toArray();
		   String[] benutzerArr2 =  benutzer.toArray(new String[0]);

toArray liefert Object[] ->
Java:
String[] arr = (String[])new Object[]{"Hallo Excetion"};
 
Ja dein Cast würde eine ClassCastException ergeben!
Java:
		   List<String> benutzer = new ArrayList<String>(Arrays.asList("Hallo","Exception"));
		//   String[] benutzerArr = (String[]) benutzer.toArray();
		   String[] benutzerArr2 =  benutzer.toArray(new String[0]);

toArray liefert Object[] ->
Java:
String[] arr = (String[])new Object[]{"Hallo Excetion"};
Darf ich dich daran erinnern:
Zeile 13 lieber so:
Java:
String[] benutzerArr = benutzer.toArray(new String[0]);
(und die eine if-Abfrage kann man sich auch sparen wenn man die while etwas umbaut 😀)

😀

l
"after this token" ist freilich ein gar nicht so schlechter Hinweis, dass es um die NÄCHSTE Zeile geht

Stimmt, das fehlt schon beim File ^^
 
Mein problem lag weiter oben
Java:
File lg = new File ( PathUsers ); // hatte ; vergessen

Eclipse wollte alles umgehen

Java:
 private String PathUsers = "F:\\twitter\\user.txt"; 
 File lg = new File ( PathUsers );
 {
      BufferedReader abc = null;
	try {
		abc = new BufferedReader(new FileReader("F:\\twitter\\user.txt"));
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
      List<String> benutzer = new ArrayList<String>();
      String newLine = null;
	try {
		newLine = abc.readLine();
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
      while (newLine != null) {
           benutzer.add(newLine);
           try {
			newLine = abc.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
      }
  }

irgend wie störte es alles:rtfm:
 
Java:
try {
     String PathUsers = "F:\\twitter\\user.txt";
     File lg = new File ( PathUsers );
     BufferedReader abc = new BufferedReader(new FileReader(lg));
     List<String> benutzer = new ArrayList<String>();
     String newLine = abc.readLine();
     while (newLine != null) {
          benutzer.add(newLine);
          newLine = abc.readLine();
     }
     String[] benutzerArr = benutzer.toArray(new String[0]);
} catch (IOException ex) {
     ex.printStackTrace();
}

Getestet und das Funktioniert.
 
Zeile 11 ist ja auch mein Code...ach vergiss es, denke wir reden hier aneinander vorbei 😀 (ich sprach von deinem ursprünglichen Code, nach deiner Verbesserung schrieb ich ja: jetzt gibts zumindest KEINE Excepion mehr)
Egal, ist eh alles fast off-topic 😳
 
Java:
try {
     String PathUsers = "F:\\twitter\\user.txt";
     File lg = new File ( PathUsers );
     BufferedReader abc = new BufferedReader(new FileReader(lg));
     List<String> benutzer = new ArrayList<String>();
     String newLine = abc.readLine();
     while (newLine != null) {
          benutzer.add(newLine);
          newLine = abc.readLine();
     }
     String[] benutzerArr = benutzer.toArray(new String[0]);
} catch (IOException ex) {
     ex.printStackTrace();
}

Getestet und das Funktioniert.

Kannst du mir kommplet mit methoden aufruf zu senden bei mir will es nicht sry
 
Das [c]benutzer.toArray(new String[0]);[/c] kann man aber auch machen, ohne dass zwei Arrays erstellt werden müssen, nämlich so: [c]benutzer.toArray(new String[benutzer.size()]);[/c]
 
wäre nicht auch [c]String.class[][/c] möglich um die erzeugung vom array komplett zu unterdrücken ?
 
Irgendwo her muss das Array doch kommen in das die benutzer hält 😉 Übergibt man ein Array der passenden Länge wird das genutzt. Ansonsten wird nen neues in passender Länge erstellt.
 
Zuletzt bearbeitet von einem Moderator:
Bin ruhig und ich sage nur dass ich der Meinung bin dass das nicht geht. Was soll denn deiner Meinung nach
Code:
String.class[]
für ein Konstrukt sein?
 
ähm ... GAR KEINER ... sondern lediglich der TYP String[] ... wobei ich glaub wenn man [c].class[/c] anhängt würde [c]java.lang.String[][/c] rauskommen wonach toArray() [c]Class[][/c] bzw [c]Class...[/c] als argument bräuchte
 
Klar, es macht beides keinen grossen Unterschied - sowohl von der Performance als auch von der Speicherauslastung. Aber wenn man das Array sowieso übergeben muss, um den richtigen Typen zu erhalten, kann man das Array gleich in der richten Grösse übergeben.
 

Zurück
Oben