PDA

View Full Version : [JAVA] problema del cavolo con la scrittura su file


Maephisto
17-09-2004, 09:02
ciao a tutti... sto scrivendo una piccola applicazione in Java che deve scrivere informazioni in un file di log... a tal proposito uso la classe FileWriter e per scrivere uso un metodo ereditato dalla classe nonna Writer, ovvero write(String)... ora il problema davvero stupido che ho è che nn so come mettere le newline... di solito per stampare a video uso \n , ma quando apro il suddetto file con notepad al posto di \n mi compare un quadratino, facendomi capire che nn è quello il simbolo giusto... allora ho provato con \r, ma il risultato è identico... con ultraedit invece il file viene aperto correttamente, ma per forza visto che ultraedit può interpretare file con qualsiasi encoding...
il discorso è che bisogna dire a java di scrivere un CRLF, che se nn sbaglio, per esperienza, credo sia la codifica di una newline sotto windows...

ally
17-09-2004, 10:30
try
{
PrintWriter pw = new PrintWriter(new FileWriter("Elenco.txt"));
boolean eof = false;
while(!eof)
{
pw.println("Abry");
pw.println("ciao");
eof = true;
}
pw.close();
}
catch(IOException e)
{
}


...sta cosa aveva fato dannare anche me ;)

...sai mica come si usa lesecuzione passo passo su eclipse? :wtf:

Ziosilvio
17-09-2004, 10:34
Originariamente inviato da Maephisto
ciao a tutti... sto scrivendo una piccola applicazione in Java che deve scrivere informazioni in un file di log... a tal proposito uso la classe FileWriter e per scrivere uso un metodo ereditato dalla classe nonna Writer, ovvero write(String)... ora il problema davvero stupido che ho è che nn so come mettere le newline... di solito per stampare a video uso \n , ma quando apro il suddetto file con notepad al posto di \n mi compare un quadratino, facendomi capire che nn è quello il simbolo giusto... allora ho provato con \r, ma il risultato è identico... con ultraedit invece il file viene aperto correttamente, ma per forza visto che ultraedit può interpretare file con qualsiasi encoding...
il discorso è che bisogna dire a java di scrivere un CRLF, che se nn sbaglio, per esperienza, credo sia la codifica di una newline sotto windows...
Per l'appunto: Windows usa CRLF, Unix usa LF, e Mac usa CR.
Questo significa semplicemente che un editor di testo che usa la convenzioni Windows va a capo "bene" solo quando trova CRLF, e cosi' via.
Ma la JVM non e' Windows, e quando programmi in Java, usi le convenzioni della JVM e non quelle di Windows.
Direi che le linee di azione possibili sono queste:
a) lasci le cose come stanno;
b) definisci una endline come "\r\n" che scrivi ogni volta che devi andare a capo;
c) definisci una endline che dipende dal sistema operativo che c'e' sotto (non so come si fa, e nemmeno se si puo' fare) e la scrivi ogni volta che devi andare a capo.

Zeus84
17-09-2004, 11:22
usa semplicemente un PrintWriter come già suggerito da ally...con tale stream usi i metodi println() che ti mandano automaticamente a capo senza troppi problemi

Angus
17-09-2004, 12:57
dalle API di PrintWriter:

...Unlike the PrintStream class, if automatic flushing is enabled it will be done only when one of the println() methods is invoked, rather than whenever a newline character happens to be output. The println() methods use the platform's own notion of line separator rather than the newline character.

La nozione di separatore di riga è presa da qualche parte dalla JVM e memorizzata nella proprietà di sistema line.separator che è accessibile tramite System.getProperty(String key)

Maephisto
17-09-2004, 13:48
grazie mille ragazzi... farò un po' di prove... chiaramente la soluzione migliore sarà di prendere in base al proprio sistema il carattere di newline e poi usare quello... è quella che più rispecchia il meccanismo della portabilità...
ciao a tutti...

kingv
17-09-2004, 14:54
Originariamente inviato da Maephisto
chiaramente la soluzione migliore sarà di prendere in base al proprio sistema il carattere di newline e poi usare quello...



non alla maniera di java...
leggi quello che ti hanno postato, le librerie sono già multipiattaforma ;)

Maephisto
17-09-2004, 16:04
benchè nn abbia capito quest'ultima frase, ti dico "okkei"