Archiv verlassen und diese Seite im Standarddesign anzeigen : FileWriter, bzw. IOException Probleme | Java
hab ein problem mit FileWriter bzw. mit "throws IOException", hier erstmal ein Teil des Codes:
void write_into_file()
{
int array_counter;
File datei = new File("listd.txt");
FileWriter ausgabestrom = new FileWriter(datei);
PrintWriter ausgabe = new PrintWriter(ausgabestrom);
for(array_counter=0;array_counter < icount;array_counter++)
{
ausgabe.print(schuelerliste[array_counter].nachname);
ausgabe.print(schuelerliste[array_counter].vorname);
ausgabe.println();
}
ausgabe.close();
}
zur info: schuelerliste ist ein array von 100 elementen .
mein problem ist jetzt das folgende: ein beispielprog , das in eine file schrieb, hab ich versucht auf eine gui - anwendung zu "portieren", d.h. wenn der user nen bestimmten button drückt, wird write_into_file() aufgerufen :
class b_save implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
write_into_file();
}
}
doch als fehler erhalte ich:
unreported exception java.io.IOException; must be caught or declared to be thrown
in dem ursprünglichen program (keine gui) wurde in main ein "throws IOException" hinzugefügt, doch wo soll ich das in diesem falle machen ? wenn ich an meine main-methode ein throws IOException anhänge, funktionierts immer noch nicht.
hoffe ihr könnt mir helfen...
tia
maceop
Nein , du hast das falsch verstanden. Da bei File-Operationen leicht was scheif gehen kann, wirft diese Klasse im Fehlerfall eine exception, und so bricht das Programm nicht einfach ab, sondern überlässt dem Anwende die Fehlerbehandlung. Dies wird praktisch erzwungen...
das ganze geht ungefähr so:
void write_into_file()
{
int array_counter;
try{
File datei = new File("listd.txt");
FileWriter ausgabestrom = new FileWriter(datei);
PrintWriter ausgabe = new PrintWriter(ausgabestrom);
for(array_counter=0;array_counter < icount;array_counter++)
{
ausgabe.print(schuelerliste[array_counter].nachname);
ausgabe.print(schuelerliste[array_counter].vorname);
ausgabe.println();
}
}catch((Exception e){});
ausgabe.close();
}
Allerdings glaube ich, dass der Synthax von catch nicht stimmt, hab leider kein File zur hand, was das macht...
Würde mich freuen, wenn mich da wer ausbessern kann...
Mfg
klappt so weit, nur muss ich ausgabe.close() auch in try packen, da er ansonsten kein datei kennt....
Puh, hätt ich nicht geglaubt, dass das so stimmt ;-)
Ach ja, das .close() hab ich übersehen, sorry....
Mfg
peschmae
01-11-2002, 07:38
oder du deklarierst die DAtei ausserhalb des Trys, die ist ja dann auf Try beschränkt, wenn du sie innerhalb deklarierst
allerdings wirft close() afaik auch eine IOException, also ist das so schon gut
MfG Peschmä
also danke erstmal.
es klappt aber eigentlich nicht so wie beabsichtigt. hier erstmal der aktuelle code
void write_into_file()
{
int array_counter;
File datei = new File("listd.txt");
try
{
FileWriter ausgabestrom = new FileWriter(datei);
PrintWriter ausgabe = new PrintWriter(ausgabestrom);
for(array_counter=0;array_counter < icount;array_counter++)
{
ausgabe.print(schuelerliste[array_counter].nachname + " ");
ausgabe.print(schuelerliste[array_counter].vorname);
ausgabe.println();
ausgabe.close();
}
}catch(IOException ioexcept)
{
System.out.println("no");
}
}
egal wieviele elemente schuelerliste (ok eins muss es schon haben) hat, es wird immer nur das erste in der datei listd.txt angezeigt.
schuelerliste[0].nachname == Günther
schuelerliste[0].vorname == Schmitz
schuelerliste[1].nachname == Dieter
schuelerliste[1].vorname == Meier
schuelerliste[2].nachname == Hans-Dieter
schuelerliste[2].vorname == Schröder
nun sollte ja eigentlich das folgende drinstehen
Günther Schmitz
Dieter Meier
Hans-Dieter Schröder
danach steht aber nur :
Günther Schmitz
in listd.txt
wisst ihr wo da das prob liegt ?
tia
maceop
ps. an icount liegts nicht
peschmae
01-11-2002, 11:16
das close muss aus der for - schleife raus
wie willst du in eine schon geschlossene Datei noch schreiben? ;-)
MfG Peschmä
solche dumme fehler zu finden kann manchmal echt schwer sein ;)
danke schön für eure hilfreichen verbessserungen !
Vielleicht solltest Du auch noch jeweils einen Carriage return mit \n ans Ende einfügen, dann steht in jeder Zeile nur ein Eintrag und das Auslesen ist dann auch einfacher.
fs111
danke für den Tipp, aber es ist so gedacht das vorname und nachname in einer zeile stehen, in jeder zeile ein "Eintrag" (besteht eben aus vor und nachname)
maceop
peschmae
01-11-2002, 14:10
und nachher hat er ja ein Println (was einem \n entspricht)
MfG Peschmä
das ganze gehört jetzt nur noch zum Themenkomplex FileHandling, doch möchte ich jetzt nicht extra nen thread eröffnen.
mit BufferedReader und readLine() les ich ne zeile aus meiner listd.txt ein, so dass z.B. der String zeile "Günther Schmitz" enthält. Nun will ich erreichen, das einem anderen string vname "Günther" zugewiesen und einem String nname "Schmitz" zugewiesen wird.
also line enthält die eingelesene zeile.
first_pos = line.indexOf(" ");
vname = line.substring(0,first_pos);
Danach enthält vname wie gewollt "Günther", doch der versuch das ganze bei Schmitz durchzusetzen.....schlägt irgendwie fehl. ich würde ja gerne einfach substring(first_pos + 1,x) machen, doch was ist in dem fall x ?
bis jetzt hab ich versucht das ganze so zu umgehen:
newpos = divide_string + 1;
pos = line.indexOf(" ",newpos);
doch hier ist pos == -1....
zusammenfassung:
ich hab ne zeile in nem string gespeichert, jetzt will ich vname das erste wort (also den Vornamen) und nname das zweite wort (also den Nachnamen) zuweisen....
es scheint fast, als wäre es besser nur println anstatt print zu verwenden und alles untereinander zu schreiben....
maceop
anda_skoa
02-11-2002, 12:30
Original geschrieben von maceop
Danach enthält vname wie gewollt "Günther", doch der versuch das ganze bei Schmitz durchzusetzen.....schlägt irgendwie fehl. ich würde ja gerne einfach substring(first_pos + 1,x) machen, doch was ist in dem fall x ?
Ich glaube das zweite Argument ist immer die Endposition, bzw eins davor.
In diesem Fall wäre es dann die Länge des Strings
Ich würde aber vorschlagen, das ganze mit einem StringTokenizer zu machen.
Ciao,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.