PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : javaproblem printwriter


medi
2007-11-11, 11:57:44
hab ein kleines problem mit dem schreiben in dateien, und zwar bricht der schreibvorgang immer nach ca. 64 zeilen bei mir hier ab wenns mehr als 64 zeilen zu schreiben sind. sind weniger als 64 einträge dann funktioniert alles tadellos...kann mir einer erklären woran das liegen könnte?

public class Log {
private PrintWriter pw = null;

/**
* Konstruktor,
* oeffnet Datei zum Schreiben
* @param ausgabepfad Ausgabedateipfad (Pfad + Dateiname)
*/
public Log(String ausgabepfad){
try {
FileOutputStream fos = new FileOutputStream(ausgabepfad);
this.pw = new PrintWriter(fos);
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* schließt Ausgabestrom, Ausgabedatei
*/
public void dateiSpeichern(){
if(this.pw != null) this.pw.close();
}

/**
* schreibt eine Zeile in die Ausgabedatei
* @param eintrag Ausgabetext.
*/
public void addEintrag(String eintrag){
this.pw.println(eintrag);
}
}

medi
2007-11-13, 07:53:29
40 hits und keine antwort? keiner ne idee? ist vielleicht die allg. herangehensweise schon falsch?

Shink
2007-11-13, 08:41:58
Das "blöde" beim Printwriter ist ja dass er keine Exception wirft und du so keine Chance hast, rauszufinden, was für ein Problem der hat.
Könntest ja einmal einen einfachen FileWriter verwenden und schaun, ob der eine Exception in dateiSpeichern() wirft.

Monger
2007-11-13, 09:09:38
Wenn du einfach nur was zum loggen brauchst, denk doch über einen FileWriter (http://java.sun.com/javase/6/docs/api/java/io/FileWriter.html) nach. Viel unkomplizierter zu handhaben.

Warum der ausgerechnet bei dir bei 64 Zeilen abbricht, ist mir allerdings schleierhaft. Ich vermute mal, da läuft irgendein Buffer voll, aber warum?

medi
2007-11-13, 10:02:05
hatte die das ganze ja auch erst mit filewriter....da brachs aber genauso ab :(

interessanter weise ist ja der buffer gefüllt (konsolenausgabe klappt zb) - nur beim dateischreiben bricht er dann einfach ab .... das soll noch einer verstehen.

Shink
2007-11-13, 17:03:30
Wie gesagt: Der Filewriter sollte eine Exception werfen, wenn ein Fehler auftritt. Diese kannst du in dateiSpeichern() fangen und wegloggen/auf die Konsole anzeigen.

Monger
2007-11-13, 17:13:09
... oder einfach nen Breakpoint im Catch Block setzen, und sich dann die Exception mal genau anschauen.

medi
2007-11-13, 23:00:23
filewriter wirft keine exception aus :( (grad getestet)

Shink
2007-11-14, 09:19:28
Hmm... bist du dir sicher dass nicht deine übrige Anwendung ein Problem hat? Was ist denn wenn du auf die Konsole ausgibst (System.out.printline())?

Der_Donnervogel
2007-11-15, 02:39:27
filewriter wirft keine exception aus :( (grad getestet)
Man kann aber zumindest über .checkError() feststellen ob ein Fehler aufgetreten ist. Ich würde außerdem mal versuchen zB einen BufferedWriter zwischen den FileWriter und den PrintWriter zu geben. Ein anderer Test wäre zu schauen was passiert, wenn man den PrintWriter im Constructor so einstellt, daß er bei jeder Zeile sofort ein flush macht, ob dann das Limit immer noch bei 64 zeilen liegt.

Gast
2007-11-15, 18:09:34
Versuche mal folgendes:

this.pw=new PrintWriter(fos,true);

Der zweite Parameter setzt eine Autoflush-Event durch durch nach einem println-Aufruf.....

Shink
2007-11-15, 21:23:36
Naja... ist ja nicht gerade so dass wir da von einer selten verwendeten Klasse einer exotischen Library einer kaum verbreiteten Programmiersprache sprechen. Irgend etwas ist wohl faul an der ganzen Sache.

Schreib einen Unit-Test dieser Logging-Klasse, dann siehst du ob die tatsächlich nach 64 Zeilen nicht mehr funktioniert.

Oder zeig uns mal die aufrufende Klasse, wenn dies einfach möglich ist.

HellHorse
2007-11-18, 14:03:49
40 hits und keine antwort? keiner ne idee? ist vielleicht die allg. herangehensweise schon falsch?
Nein, der Problembeschrieb ist falsch. Poste doch einfach mal einen minimalen Codeschnipsel der das Problem reproduziert.

Gast
2007-11-18, 14:25:06
Hallo,
ich bin zur Zeit dabei, mir Javascript beizubringen, als Einstieg in die Programmierung sozusagen.
Leider stoße ich auch schon auf zwei Probleme.
1) Ich möchte, dass der Benutzer zwei Zahlen eingibt, die anschließend miteinander addiert, substrahiert, multipliziert und dividiert werden.

Code:
var a = prompt ("erste Zahl");
var b = prompt ("zweite Zahl");
var x = a+b;
alert (x);

Gibt der Benutzer z.b 3 und 8 ein, erhält er als Ergebnis nicht 11 sondern 38.
Daraus schließe ich, dass die Zahlen wohl als String behandelt werden.
Doch wie erhalte ich das richtige Ergebnis?

2) Bei einer Passworteingabe erhält der Benutzer die Möglichkeit dreimal danebenzuliegen, bevor die Abfrage abbricht.
So weit bin ich bisher gekommen..
Code:
var passwort = "Helium";
var Eingabe ="";
var i = 1;

while ( Eingabe != passwort && i<=3)
{
Eingabe = prompt ("Passwort", "");
i++;
}

Das funktioniert so weit ganz gut. Nur was hätte ich tun müssen, um den Anwender im Fall eines Falscheingebens anzuzeigen, der wievielte Versuch es war.

Danke im vorraus

The_Invisible
2007-11-18, 15:50:42
Hallo,
ich bin zur Zeit dabei, mir Javascript beizubringen, als Einstieg in die Programmierung sozusagen.
Leider stoße ich auch schon auf zwei Probleme.
1) Ich möchte, dass der Benutzer zwei Zahlen eingibt, die anschließend miteinander addiert, substrahiert, multipliziert und dividiert werden.

Code:
var a = prompt ("erste Zahl");
var b = prompt ("zweite Zahl");
var x = a+b;
alert (x);

Gibt der Benutzer z.b 3 und 8 ein, erhält er als Ergebnis nicht 11 sondern 38.
Daraus schließe ich, dass die Zahlen wohl als String behandelt werden.
Doch wie erhalte ich das richtige Ergebnis?

2) Bei einer Passworteingabe erhält der Benutzer die Möglichkeit dreimal danebenzuliegen, bevor die Abfrage abbricht.
So weit bin ich bisher gekommen..
Code:
var passwort = "Helium";
var Eingabe ="";
var i = 1;

while ( Eingabe != passwort && i<=3)
{
Eingabe = prompt ("Passwort", "");
i++;
}

Das funktioniert so weit ganz gut. Nur was hätte ich tun müssen, um den Anwender im Fall eines Falscheingebens anzuzeigen, der wievielte Versuch es war.

Danke im vorraus

1. schau dir eval() an
2. passwortabfragen sind unter javascript sinnlos da alles im quellcode ersichtlich ist
3. java != javascript

mfg

medi
2007-11-18, 15:55:41
1. java hat nix mit javascript zu tin ;)
2. du musst den string datentyp in einen integer datentyp zwangsumwandeln (frag mich aber nicht wie die funktion hiess...musste mal googeln)
3. javascript für ne passwortabfrage ist ne schlechte wahl...jedenfalls mit deiner methode da das lösungswort ja mit im quellcode steht
4.
var abbruch = false;
var i = 0;
while(!abbruch){
Eingabe = promt("Passwort", "");
if(Eingabe == passwort)
abbruch = true;
else{
i++;
if(i==4)
abbruch=true
else
alert("Das war ihr " + i + ". Versuch");
}

PS: zu langsam :D

Tiamat
2007-11-18, 17:32:46
Hi , ich war das übrigens.
Ich war vorhin in diesem Thread und wollt nen neuen Aufmachen , habs irgendwie verpeilt und dann ist es hier gelandet :redface:

Interessant ist, dass ich folgendes herausgetüftelt habe.
Alle Grundrechenoperationen außer + führen zum gewünschten Ziel.
Über eval() hatte ich das selbe Problem.
habs jetzt einfach über var x = a * 1 + b * 1; gelöst.

Wie gesagt ich befinde mich noch in den Kinderschuhen , was programmieren angeht. Ich würd jetzt so ne Passwortabfrage nicht auf meine Homepage setzen *g*, das hat nur didaktische Gründe.
Danke

Shink
2007-11-18, 17:49:47
Dann poste das nirgends, sonst kopiert sich das noch jemand zur Verwendung heraus!

Tiamat
2007-11-18, 17:59:55
Wieso ? Sieht man doch auf den ersten Blick dass es sich um JS und nicht um Java handelt.