Zum Inhalt springen

Token greift nicht auf die jeweilige Datei


java_anfaenger

Empfohlene Beiträge

Guten Tag leute... kleines Problem vorerst meine Code Abschnitte

meine .txt Datei sieht so aus..

Mathematik I
800001	2,0
800002	2,3
800003	2,0
800004	1,7
800005	1,0
 private static void notenEinlesen() {
    	try {
			File einOrdner = new File(ordnerEin);
			
			//alle Dateien einsehen und die Dateie Studierende.txt weglassen
			File[] listdateien = einOrdner.listFiles();
			for (File datei : listdateien) {
				if (!datei.getName().equals(ordnerEin)) {
					//zum einlesen der Dateien
					FileInputStream tmp = new FileInputStream(datei);
					InputStreamReader utf = new InputStreamReader(tmp, StandardCharsets.UTF_8);
					BufferedReader temp = new BufferedReader(utf);
					String line = "";
					
					// Die erste Zeile der .txt Datei benennen damit Programm weiß
					String fach = temp.readLine();
					// While solange die Noten und Matrikelnummern durchgelesen werden
					while ((line = temp.readLine()) != null){
						String[] tokens = line.split("\\t");
						//aus der txt die Matrikelnummer entnehmen
						int matrikelnummer = Integer.parseInt(tokens[0]);
						//aus der txt die Note entnehmen
						String note = tokens[1];
						//Note der Studenten eintragen
						studentobjekt.get(matrikelnummer).noteEintragen(fach, note);
					}
					
					temp.close();
					utf.close();
					tmp.close();
				}
			}
		}
		catch (IOException e) {
			System.out.println("Fehler");
			e.printStackTrace();
		}
	}

Wie in den Kommentaren beschrieben will ich die Datei Studierende auslassen, doch das Programm greift auf die Studierende Datei zu .. 

file = studierende.txt 

ordnerEin = (wo sich studierende.txt befindet) aber auch andere .txt dateien

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

durch die beiden Variablen einOrdner und ordnerEin ist's ziemlich einfach durcheinander zu kommen. Vergib da besser mal andere Namen, bei denen man deutlich sieht um was es jeweils geht.

Die Variable file sehe ich nirgendwo. Gehört die hier hin?

if (!datei.getName().equals(ordnerEin)) {

 

temp und tmp sind auch schlechte Namen. Benenn die einfach als das was sie sind: inputStream und bufferedReader.

utf als inputStreamReader oder zumindest als utfReader. Wobei man bei utfReader wahrscheinlich immer noch stutzig wird - es gibt aber wenigstens einen Hinweis, dass es sich um einen Reader handelt.

 

 

 

Bearbeitet von PVoss
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb PVoss:

Moin,

durch die beiden Variablen einOrdner und ordnerEin ist's ziemlich einfach durcheinander zu kommen. Vergib da besser mal andere Namen, bei denen man deutlich sieht um was es jeweils geht.

Die Variable file sehe ich nirgendwo. Gehört die hier hin?


if (!datei.getName().equals(ordnerEin)) {

 

temp und tmp sind auch schlechte Namen. Benenn die einfach als das was sie sind: inputStream und bufferedReader.

utf als inputStreamReader oder zumindest als utfReader. Wobei man bei utfReader wahrscheinlich immer noch stutzig wird - es gibt aber wenigstens einen Hinweis, dass es sich um einen Reader handelt.

 

 

 

private static String file = "./ein/Studierende.txt";

die ist in der Main ganz oben

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb PVoss:

Jo, aber du nutzt sie ja nirgendwo im Code den du gezeigt hast. Oder ich hab die Stelle übersehen.

public class MainProgramm { 

    private static String file = "./ein/Studierende.txt";
    private static String ordnerEin = "./ein";
    private static String ordnerAus = "./aus";
    private static HashMap<Integer,Student> studentobjekt = null;

So sieht der Anfang aus :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Minuten schrieb PVoss:

Ja.

Du musst die Dateinamen aber trotzdem mit der Variable file vergleichen. Du vergleichst aber mit ordnerEin.

Guck nochmal nach, ob du die Variable file irgendwo in deinem Code nutzt, außer bei der Initialisierung.

habe ich auch gemerkt geändert, aber dennoch tut sich nichts ^^

 

private static void notenEinlesen() {
    	try {
			File einOrdner = new File(ordnerEin);
			
			//alle Dateien einsehen und die Dateie Studierende weglassen
			File[] listdateien = einOrdner.listFiles();
			for (File datei : listdateien) {
				if (!datei.getName().equals(file)) {
					//Aus Youtube Vorlesung zum einlesen der Dateien
					FileInputStream fileinpstr = new FileInputStream(datei);
					InputStreamReader inpstrre = new InputStreamReader(fileinpstr, StandardCharsets.UTF_8);
					BufferedReader bufr = new BufferedReader(inpstrre);
					String line = "";
					
					// Die erste Zeile der .txt Datei benennen damit Programm weiß
					String fach = bufr.readLine();
					// While solange die Noten und Matrikelnummern durchgelesen werden
					while ((line = bufr.readLine()) != null){
						String[] tokens = line.split("\\t");
						//aus der txt die Matrikelnummer entnehmen
						int matrikelnummer = Integer.parseInt(tokens[0]);
						//aus der txt die Note entnehmen
						String note = tokens[1];
						//Note der Studenten eintragen
						studentobjekt.get(matrikelnummer).noteEintragen(fach, note);
					}
					
					fileinpstr.close();
					inpstrre.close();
					bufr.close();
				}
			}
		}
		catch (IOException e) {
			System.out.println("Fehler");
			e.printStackTrace();
		}
	}

 

Bearbeitet von java_anfaenger
Link zu diesem Kommentar
Auf anderen Seiten teilen

Es geht darum, dass dein String file ein Dateiname inklusive einem vorangestellten Ordnerpfad ist. Wenn du dir aber den Namen der Datei ausgeben lässt, wird dort höchstwahrscheinlich kein Ordnerpfad mit angegeben sein. D.h. deine equals-Abfrage wird nicht greifen.

Wie schon viele vor mir auch in den anderen Threads von dir geschrieben haben: Nutze doch erst einmal deinen Debugger und schau dir an, welche Werte du wann in welcher Variable (oder auch Konstanten) hast und was du an der Stelle eigentlich erwarten würdest. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Rienne:

Es geht darum, dass dein String file ein Dateiname inklusive einem vorangestellten Ordnerpfad ist. Wenn du dir aber den Namen der Datei ausgeben lässt, wird dort höchstwahrscheinlich kein Ordnerpfad mit angegeben sein. D.h. deine equals-Abfrage wird nicht greifen.

Wie schon viele vor mir auch in den anderen Threads von dir geschrieben haben: Nutze doch erst einmal deinen Debugger und schau dir an, welche Werte du wann in welcher Variable (oder auch Konstanten) hast und was du an der Stelle eigentlich erwarten würdest. :)

Der debugger funktioniert bei mir nicht so wie gewollt.. leider 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb Rienne:

Hast du deinen Code denn auch als "Debug as..." ausgeführt?

Wenn sich das nicht automatisch öffnet, solltest du auch die Möglichkeit haben oben rechts in die Debug-Sicht zu wechseln.

Exception in thread "main" java.lang.NumberFormatException: For input string: "Bob Berg,800002,Medieninformatik"

Das ist die Fehlerausgabe meiner Konsole und die Information mit "Bo.." die liegt in der Studierende.txt

Bearbeitet von java_anfaenger
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Minuten schrieb Rienne:

Hast du deinen Code denn auch als "Debug as..." ausgeführt?

Wenn sich das nicht automatisch öffnet, solltest du auch die Möglichkeit haben oben rechts in die Debug-Sicht zu wechseln.

Hab es ausgeführt und auch nachgeschaut, doch bei mir werden keine Variablen angezeigt, also das Fenster bleibt blank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das kann aber auch an den Einstellungen des Users in dem Tutorial liegen. Ich meine mich zu erinnern, die Variablen selbst eingegeben zu haben, die ich überwachen möchte, als ich das letzte Mal mit Eclipse debugged habe. Ist aber auch schon eine Weile her.

Ggf. solltest du dir da noch mal ein anderes Tutorial anschauen. Debuggen ist mit die wichtigste Fähigkeit, die man als Entwickler beherrschen sollte. 😊

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Rienne:

Ich meine mich zu erinnern, die Variablen selbst eingegeben zu haben

Du hast im Eclipse beides: ein Fenster mit den deklarierten Variablen und deren aktueller Wert und ein zweites Panel, wo man Ausdrücke tippen und auswerten kann, bspw um mal mit den aktuellen Werten mal fix zu rechnen oder Methoden aufzurufen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...