PDA

View Full Version : [java] Leggere txt e mantenere stessa formattazione


federico100mt
25-03-2009, 09:58
Ciao, nn riesco a capire come posso mantenere la stessa formattazione di un .txt

Praticamente lo leggo, lo metto in una stringa e poi lo metto qui:
JTextArea textArea = new JTextArea(stringa);


Il file lo leggo con questo codice:

while(filebuffer1.ready()){
lic+=(filebuffer1.readLine());
}


molto probabilmente é li che sbaglio.

mi mette il testo tutto attaccato, non riuscendo nenache a leggerelo. Ci sono altre componenti, o metodi di lettura, che mantengono la stessa formattazione del file di origine?

banryu79
25-03-2009, 11:25
Supponendo che "filebuffer1" sia un BufferedReader, il motivo per cui non ottieni quello che desideri è il modo in cui opera il metodo .readLine()

readLine

public String readLine()
throws IOException

Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.

Returns:
A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
Throws:
IOException - If an I/O error occurs

Legge quindi una "singola linea" e te la restituisce senza i caratteri di fine riga tramite un oggetto String.
Devi inserire tu il terminatore di fine riga in coda alla String ricevuta.

Per non creare mile-milla String (l'operatore + applicato a due String crea una terza String che è il risultato delle prime due concatenate; in Java gli oggetti String sono immutabili) nel tuo ciclo puoi dichiarare l'oggetto "lic" come una StringBuilder e usare il suo metodo .append() per concatenare la String restituita dal BufferedReader, ad esempio:

StringBuilder lic = new StringBuilder;

while(filebuffer1.ready()){
String line = filebuffer1.readLine();
lic.append(line); // concateno la stringa letta dal buffer
lic.append("\n"); // concateno il carattere di fine riga
}

PGI-Bis
25-03-2009, 12:56
Leggi il file di testo tutto in una volta.

Scanner in = new Scanner(il file txt).useDelimiter("\\Z");
try {
String fullText = in.next();
} finally {
in.close();
}

federico100mt
25-03-2009, 12:58
ok...

ora sembra andar bene!

grazie mille ragazzi,
:)

banryu79
25-03-2009, 13:14
Leggi il file di testo tutto in una volta.

Scanner in = new Scanner(il file txt).useDelimiter("\\Z");
try {
String fullText = in.next();
} finally {
in.close();
}
Buono a sapersi...
Cos'è la stringa passata come parametro al metodo useDelimiter()? Una regular expression?

PGI-Bis
25-03-2009, 13:23
Sì, è un'espressione regolare appartenente alla specie (rarissima) delle espressioni regolari "che si capiscono" :D.

\Z significa "fino alla fine dell'input, escluso il carattere che segnala la fine dell'input, se c'è".

Diventa "\\Z" perchè \ è un carattere speciale nelle stringhe Java e per poterlo "scrivere in una stringa" bisogna usare l'escape '\'.

banryu79
25-03-2009, 14:40
Sì, è un'espressione regolare appartenente alla specie (rarissima) delle espressioni regolari "che si capiscono

Infatti :asd:

Grazie PGI :)