Java: salvare con JfileChooser
Programmazione & Co.
Sabato 31 Luglio 2010 11:28

Grazie all'aiuto del forum HTML.it (http://forum.html.it/forum/).

Purtroppo sono ancora agli inizi della programmazione e da solo non riesco a fare tutto.

Inoltre Swing è un argomento vasto e complesso.

Esistono vari modi per creare un jFileChooser.

Io l'ho inserito direttamente dentro al Frame e parte quando viene richiamato l'evento da tastiera Ctrl+S o quando si clicca sul menu File->Salva.

Prima di tutto importiamo i package che ci servono:

import javax.swing.*;
import java.io.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

Il primo serve per usare le librerie swing; il secondo per operazioni IO (in questo caso per scrivere/creare il file da salvare);  il terzo e il quarto per il filechooser e i filtri.

Vediamo il codice:

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
JFileChooser fc = new JFileChooser();
FileFilter csvFilter = new FileNameExtensionFilter("File CSV", "csv");
FileFilter txtFilter = new FileNameExtensionFilter("File TXT", "txt");
fc.addChoosableFileFilter(csvFilter);
fc.addChoosableFileFilter(txtFilter);
int returnVal = fc.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File f = fc.getSelectedFile();
FileFilter selectedFilter = fc.getFileFilter();
if (f.getName().indexOf('.') == -1) {
if (selectedFilter == csvFilter) {
f = new File(f.getPath() + ".csv");
} else if (selectedFilter == txtFilter) {
f = new File(f.getPath() + ".txt");
}
}
try {
FileWriter file = new FileWriter(f, true);
PrintWriter out = new PrintWriter(file);
out.println(jTextArea1.getText());
out.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(this, e, "ERRORE", JOptionPane.ERROR_MESSAGE);
}
}
}

Come vedete il codice è all'interno di un evento.

Ho preferito metterlo qua ma probabilmente dal punto di vista del "design" del codice sarebbe meglio mettere il codice altrove e poi richiamarlo.

Comunque, alla seconda riga creo un oggetto JFileChooser, che corrisponde alla classica finestra per navigare tra le cartella.

Nelle quattro roghe sotto aggiungo due filtri; uno per i file .txt e uno per i .csv.

Creo una variabile int invocando il metodo showSaveDialog.

JFileChooser ha due metodi principali: showOpenDialog che serve per aprire il file, e showSaveDialog che serve per slavarli.

Apro un if: APPROVE_OPTION mi restituisce un valore se l'operazione è stata approvata.

Se è così parte il codice per salavare il file.

f è l'oggetto che verrà richiamato dopo nell'operazione IO.

getFileFilter richiama il filtro selezionato (txt o csv).

A seconda di quello che abbiamo richiamato entriamo in uno dei due if, che svolgono lo stesso compito ma con filtri diversi.

La riga f.getName().indexOf('.') == -1 serve per verificare se in fase di salvataggio è stato aggiunta l'esensione a mano.

In questo caso il file viene salvato così com'è; sennò viene aggiunto .txt o .csv al nome a seconda del filtro selezionato.

Poi apro il blocco try/catch per salvare il file.

Nel mio caso il contenuto lo prendo dalla JTextArea.


Forse non sono stato troppo specifico, ma spiegare ogni metodo diventa lungo e prolisso.

Se usate un IDE (io uso NetBeans), potete vedere che cosa ogni metodo selezionato, con una spiegazione molto più efficace della mia.

Alla prossima!


Ultimo aggiornamento Sabato 31 Luglio 2010 11:57
 

Aggiungi commento