Daten aus Date lesen

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

ich habe ein paar Methoden programmiert, mit denen ich Daten aus einer Datei auslesen und diese dann auf Textfeldern ausgeben kann. Die Daten sollen auf verschiedene Textfelder ausgegeben werden; die einzelnen Datenteile sind mit einem Doppelpunkt voneinander getrennt:
Code:
test:test:test:test:test:test:test:test:test:
test:test:test:test:test:test:test:test:test:
test:test:test:test:test:test:test:test:test:
Die Daten in einer Zeile bilden einen Datensatz. Allerdings funktioniert das ganze noch nicht richtig:
[highlight=Java]
public final int DATA_VALUES = 9;
public int index = 1;
/* Returns the user information */
public int giveBack = 0;
private String[][] savedData;
private String[] data = new String[DATA_VALUES];
public String[] dataBack = new String[DATA_VALUES];
private File file = new File("./data", "data.csv");

public boolean readData() {
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

try {
String row ="";
String column = "";
int rowNumber = 0;

while((row = bufferedReader.readLine()) != null) {
column += row + "\n";
++rowNumber;
}

String[] rowArray = new String[rowNumber];
rowArray = column.split("\n");
savedData = new String[rowNumber][DATA_VALUES];

for (int i = 0; i < rowNumber; i++) {
//Search for the first occurrence of a character or substring
if (rowArray.indexOf(":") > -1) {
savedData = rowArray.split(":");
}
}
bufferedReader.close();
} catch (IOException e) {
System.out.println(e);
return false;
}
} catch (FileNotFoundException e) {
System.out.println(e);
savedData = new String[0][0];
return false;
}
return true;
}

public int getData() {
readData();

for (int i = 0; i < DATA_VALUES; i++) {
dataBack = "" + data;
}

return giveBack = 4;
}
[/highlight]
Die Methode, mit der die Daten eingelesen werden:[highlight=Java] public int setData(String forename, String name, String street, String number,
String zipcode, String city, String code, String telephone, String mobile) {

data[0] = forename;
data[1] = name;
data[2] = street;
data[3] = number;
data[4] = zipcode;
data[5] = city;
data[6] = code;
data[7] = telephone;
data[8] = mobile;

for (int i = 0; i < data.length; i++) {
if (data.equals("")) {
return giveBack = 1;
}
}

try {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, true));
String row = "";
for (int i = 0; i < data.length; i++) {
row += data + ":";
}
//Avoid, that a empty line will be created
if (!row.equals("")) {
row += "\n";
}

bufferedWriter.write(row, 0, row.length());
bufferedWriter.close();
dataAdministration.changeLabel();
} catch (IOException e) {
System.out.println(e);
}
return giveBack = 2;
}[/highlight]
Und die Methoden in einer übergeordneten Klasse, die die Daten vvn den TextFeldern holen und weider in sie schreiben soll:
[highlight=Java]
public void saveInputData() {
saveData.setData(
addressBookGUI.tfForename.getText(),
addressBookGUI.tfName.getText(),
addressBookGUI.tfStreet.getText(),
addressBookGUI.tfNumber.getText(),
addressBookGUI.tfZipcode.getText(),
addressBookGUI.tfCity.getText(),
addressBookGUI.tfCode.getText(),
addressBookGUI.tfTelephone.getText(),
addressBookGUI.tfMobile.getText());
addressBookGUI.tfIndex.setText("" + index);
changeLabel();
}
public void showDataOfIndex() {
saveData.getData();
addressBookGUI.tfForename.setText("" + saveData.dataBack[0]);
addressBookGUI.tfName.setText("" + saveData.dataBack[1]);
addressBookGUI.tfStreet.setText("" + saveData.dataBack[2]);
addressBookGUI.tfNumber.setText("" + saveData.dataBack[3]);
addressBookGUI.tfZipcode.setText("" + saveData.dataBack[4]);
addressBookGUI.tfCity.setText("" + saveData.dataBack[5]);
addressBookGUI.tfCode.setText("" + saveData.dataBack[6]);
addressBookGUI.tfTelephone.setText("" + saveData.dataBack[7]);
addressBookGUI.tfMobile.setText("" + saveData.dataBack[8]);
changeLabel();
}[/highlight]
Als Ausgabe bekomme ich immer nur "null" angezeigt - ich finde den Fehler aber einfach nicht.
 
Zuletzt bearbeitet:
Standard-Vorgehensweise bei sowas:

Über einfache System.out.println()-Anweisungen herausfinden, wo der Fehler ist.

Anscheinend ist in deinem dataBlock-Array überall nur "null" gespeichert.
Überprüfe das mal.

Wenn das so ist (muss eig. so sein), geh an die Stelle wo du das Array befüllst.
Schau, was dort der Wert ist von dem Objekt, was du reinlegst.
(Warhscheinlich auch noch null).

Überlege, woher du dir das Objekt holst. Überprüfe, ob es null ist an der Stelle,
Usw.

Dort, wo du dir dann in erster Instanz ein "null" einfängst, liegt der Fehler.
Dann musst du halt überlegen was du falsch machst.
 
'funktioniert nicht richtig' usw hilft nicht weiter,
mit unvollständigen Code kann man auch nur bedingt arbeiten,
niemand garantiert, dass saveData.dataBack im zweiten Codeausschnitt etwas mit dem obigen Code zu tun hat,
oder zumindest dass da nicht mehrere unterschiedliche Objekte erzeugt werden:
eines ist schön gefüllt, das andere leere wird verwendet,

-----

arbeite dich ganz einfach Schritt für Schritt voran, überprüfe mit Debugger oder System.out.println,
was in readData() so alles passiert, wie am Ende dataBack gefüllt wird,

und später prüfe wieder, ob dataBack immer noch Werte enthält,

---

allgemein:
setText("" + saveData.dataBack[0]);
wenn dataBack schon String enthält, wozu dann "" + string? extra damit ein null-String auch als "null" ausgegeben wird und nicht ""?

> savedData = new String[rowNumber][DATA_VALUES];
> for (int i = 0; i < rowNumber; i++) {
> savedData = rowArray.split(":");

du erzeugst erst ein String[][] der Länge rowNumber (erste Dimension savedData),
dann rowNumber verschiedene String[] (zweite Dimension savedData),
und überschreibst diese vielen Einzel-String[] in der Schleife,

erzeuge sie lieber gar nicht erst:
savedData = new String[rowNumber][];
 
Also, euer Tipp mit dem Debugger war echt genial. :toll: Da macht das Programmieren doch gleich noch mehr Spaß. :grin: Hab zwar ein ein bisschen gebraucht bis ich den Fehler gefunden und behoben hatte, aber dafür läuft es jetzt.
Dass ich nicht schon früher auf die Idee gekommen bin den Debugger einzusetzen...Ich arbeite erst seit einem Tag mit dem, hab mir aber schon überlegen wie ich es geschafft habe mal ohne dessen Hilfe zu programmieren - mit dem Debugger geht das alles viel einfacher.

erzeuge sie lieber gar nicht erst:
savedData = new String[rowNumber][];
Hab ich geändert, macht anders wirklich keinen Sinn.

Also, ein fettes Danke!🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben