Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Salvataggio file txt con formattazione

    Ciao a tutti, sono nuovo del forum. Mi piace programmare in Java a tempo perso. Sto creando un semplice blocco note. Sono arrivato a gestire il salvataggio del testo scritto. Lo prendo da una JTextArea e lo salvo in un file. Il mio problema � che non mi vengono salvati i ritorni a capo. Ho provato diversi metodi di scrittura dal PrintWriter(che in teoria salva la formattazione) al BufferedWriter. Inoltre ho provato a prendere riga per riga la textArea e aggiungerci un \n a fine riga e poi salvare questa nuova stringa. Alla fine per� quando apro il txt generato, con ad esempio il blocco note di windows mi ritrovo tutto in una riga. Non so pi� come fare.
    Un saluto e grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    L'a-capo è platform-dependent. L'uso di PrintWriter, BuffererdWriter, ecc, non c'entra nulla: puoi usare quello che vuoi.
    Ciascun sistema operativo lo tratta "a modo suo".
    I sistemi Unix-like lo eseguono, appunto, aggiungendo un "\n". I sistemai Windows invece vogliono una coppia di caratteri: "\r\n".

    Java mette a disposizione la corretta sequenza in base al sistema operativo su cui sta girando, all'interno di una apposita system property:

    codice:
    String newLine = System.getProperty("line.separator");

    Quello è ciò che va aggiunto alla fine della riga per ottenere l'andata a capo in modo cross-platform.

    Ovviamente, il file di testo generato sarà correttamente interpretato solo dal sistema operativo che sia conforme a tale separatore.

    Un modo "più rapido" per ottenere lo stesso risultato è usare ad esempio PrintWriter ed usare i relativi metodi println() (che sta, appunto, per "line"), i quali aggiungono automaticamente la sequenza di andata a capo per il sistema operativo in uso.

    Ultima modifica di LeleFT; 08-02-2017 a 16:14
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da marcoozmg Visualizza il messaggio
    Ciao a tutti, sono nuovo del forum. Mi piace programmare in Java a tempo perso. Sto creando un semplice blocco note. Sono arrivato a gestire il salvataggio del testo scritto. Lo prendo da una JTextArea e lo salvo in un file. Il mio problema � che non mi vengono salvati i ritorni a capo. Ho provato diversi metodi di scrittura dal PrintWriter(che in teoria salva la formattazione) al BufferedWriter. Inoltre ho provato a prendere riga per riga la textArea e aggiungerci un \n a fine riga e poi salvare questa nuova stringa. Alla fine per� quando apro il txt generato, con ad esempio il blocco note di windows mi ritrovo tutto in una riga. Non so pi� come fare.
    Domande: hai già letto la documentazione di JTextArea? In particolare la riga che parla dei Newline che rimanda alla documentazione del DefaultEditorKit?
    Hai già notato che JTextArea (JTextComponent in generale) ha i metodi read (legge da un Reader) e write (scrive su un Writer)?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    I sistemai Windows invece vogliono una coppia di caratteri: "\r\n".

    Java mette a disposizione la corretta sequenza in base al sistema operativo su cui sta girando, all'interno di una apposita system property:

    codice:
    String newLine = System.getProperty("line.separator");
    Grazie mille per la risposta,i due

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    I sistemai Windows invece vogliono una coppia di caratteri: "\r\n".

    Java mette a disposizione la corretta sequenza in base al sistema operativo su cui sta girando, all'interno di una apposita system property:

    codice:
    String newLine = System.getProperty("line.separator");
    Grazie mille per la risposta,i due metodi che mi hai detto funzionano entrambi quando il file generato lo apro ad esempio con il blocco note di windows. Il metodo println di PrintWriter invece no. Sorge però un altro problema, nel momento in cui vado a leggere il txt col mio programma non mi da nessun ritorno a capo. Se invece nella lettura del file, alla fine di ogni riga letta, aggiungo "\n" nella textArea mi ritroverò due ritorni a capo per ogni riga. Grazie intanto

  6. #6
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Domande: hai già letto la documentazione di JTextArea? In particolare la riga che parla dei Newline che rimanda alla documentazione del DefaultEditorKit?
    Hai già notato che JTextArea (JTextComponent in generale) ha i metodi read (legge da un Reader) e write (scrive su un Writer)?
    Ciao,grazie per la risposta, ho provato ad usare il metodo reader della classe textArea ma senza tanto successo. Proverò ad approfondirle meglio perchè probabilmente sono una soluzione più ottimizzata. Grazie

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Prova a postare un po' di codice perchè non ho capito gran ché di cosa stai facendo...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Si scusami immagino
    Allora attraverso un JFileChooser faccio scegliere all'utente dove e come salvare ciò che ha scritto. Memorizzo in una variabile File il path (frame.f) e salvo il testo attraverso:
    codice:
    BufferedWriter write=new BufferedWriter(new FileWriter(frame.f));
    write.append(recuperoTesto());
    write.flush();
    RecuperoTesto() mi prende il testo della JTextArea linea per linea, aggiunge a fine riga il metodo che mi hai consigliato e salva in una variabile String. Frame.areaTesto è il riferimento alla textArea
    codice:
    testo="";
    for (int i=0;i<frame.areaTesto.getLineCount();i++) {
    try{
    testo=testo+frame.areaTesto.getText(frame.areaTesto.getLineStartOffset(i),frame.areaTesto.getLineEndOffset(i)-        frame.areaTesto.getLineStartOffset(i))+System.getProperty("line.separator");
    } catch(BadLocationException exc) {
    exc.printStackTrace();
    }
    }
    Questo è per salvare. Per aprire un file utilizzo sempre JFileChooser e apro attraverso il seguente codice. frame.f è il nome del file da aprire
    codice:
    BufferedReader read=new BufferedReader(new FileReader(frame.f));
    String line=read.readLine();
    while (line!=null) {
    frame.areaTesto.append(line+"\n");
    line=read.readLine();
    }
    read.close();
    Spero con un po' di righe di codice si capisca il funzionamento, altrimenti posto più parti. Così facendo salvando un file txt e aprendolo in blocco note mi da i giusti ritorni a capo. Nell'ultimo frammento nel metodo append ho messo \n, se apro invece il .txt con il mio programma mi da due ritorni a capo per ogni riga. Se invece tralascio \n mi scrive tutto su una riga.
    Ciao e grazie

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.