Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    [Java]Problema scrittura di un file di testo

    Ho un problema con la scrittura di un file di testo, che mi serve per il salvataggio di alcuni dati, e cioè: aprendo il file con il blocco note di windows(è un normale txt) tutti i println() che ho eseguito sono svaniti! E' tutto scritto su una stessa riga! Dov'è il problema? Nel notepad di windows o nell'oggetto che uso io? Per scrivere testo uso sempre:
    Codice PHP:
    pw = new PrintWriter(new BufferedWriter(new FileWriter("nomefile"))); 
    premetto che il file viene creato e salvato correttamente, anche perchè alla fine eseguo sempre la close()
    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Teoricamente se scrivi con println() dovrebbe andare a capo. Puoi sempre inserire \r\n al termine della riga.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da Patrick Jane
    Teoricamente se scrivi con println() dovrebbe andare a capo. Puoi sempre inserire \r\n al termine della riga.
    in realtà println scrive una nuova linea, che su sistemi windows corrisponde a \r\n, mentre su sistemi unix solo a \n.
    Se il file è creato su unix, su windows blocco note non è detto che "capisca" che solo \n è il carattere di nuova linea.

    Prova ad aprirli con notepad++ e vedi se ti perdi la linea
    RTFM Read That F*** Manual!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Si infatti, era per farlo anche manualmente. Comunque come ha giustamente detto valia puoi aprire il file con notepad.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    si IO posso aprirli con notepad ma un utente qualunque avrà impostato di default che i file txt si aprano con il blocco note...
    comunque non capisco il "\r": io di solito, sia su gui che su prompt, ho sempre usato solo \n ed effettivamente andava a capo; poi non so se per la scrittura su file è diverso... comunque ho provato con la println() prima e mi da quel risultato che vi ho detto, mentre provando con \r\n come avete detto voi invece funziona ò.ò

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Windows vede la sequenza "ritorno carrello" (cursore ad inizio riga), "nuova riga" (riga sotto). Linux utilizza solo "nuova riga" e Mac se non vado errato "ritorno carrello".

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    ah ok! Sarebbe ritorno del cursore a inizio riga praticamente! Che cosa stupida... è ovvio che se vado a capo voglio far ritornare il cursore. Comunque ora ho inserito \r\n il che però mi elimina la portabilità su altri sistemi giusto? perchè mac non riconoscerà \r e linux \n... quindi come faccio dato che il println() non funziona?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da John360
    ah ok! Sarebbe ritorno del cursore a inizio riga praticamente! Che cosa stupida... è ovvio che se vado a capo voglio far ritornare il cursore. Comunque ora ho inserito \r\n il che però mi elimina la portabilità su altri sistemi giusto? perchè mac non riconoscerà \r e linux \n... quindi come faccio dato che il println() non funziona?
    guarda lavoro da anni con queste cose e a meno di casini particolari problemi di portabilità di un file di testo non ne ho.
    Mettiamo che tu metti la sequenza \r\n (di windows): su un sistema unix \r è ignorato, non è ignoranto \n e va a capo. Stesso dicasi su un sistema mac.

    Puoi avere problemi per quegli editor che non interpretano bene la sequenza, ma ci sono programmi free (tipo dos2unix e unix2dos) che ti fanno il passaggio da una versione all'altra in modo molto semplice.

    poi fai conto che quando tu fai println() in java si chiama una newline, che guarda caso stampa a video la sequenza (presa da property line.separator) corretta.

    se vuoi fissare tu un formato universale per la tua logica, non fare println, ma print e passi come argomento il line separator che a te interesa
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    ah ok quindi se un carattere in un sistema non è presente viene semplicemente ignorato! Ecco questo era il problema che mi ponevo riguardo alla portabilità! In ogni caso come ti ho detto il println non mi funziona e non so come mai... utilizzerò quella sequenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da John360
    ah ok quindi se un carattere in un sistema non è presente viene semplicemente ignorato! Ecco questo era il problema che mi ponevo riguardo alla portabilità! In ogni caso come ti ho detto il println non mi funziona e non so come mai... utilizzerò quella sequenza
    no, allora.

    Fai il tuo file su UNIX in cui la newline è data da \n, se apri quel file su WIN visto che il line separator è \r\n, non trovando quella sequenza, non si va a capo!!!!

    Alcuni editor (più evoluti di notepad) riconoscono questa situazione e a visualizzano correttamente il file, ma la sequenza di byte interna non cambia!!!!

    L'editor stesso a volte ti consente di cambiare il tipo di newline (indipendentemente dal sistema in cui sei), questo comporta una modifica al file (banalmente una riscrittura dello stesso).

    println funziona come deve funzionare!!
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.