Salvare con JFileChooser con controllo sull'esistenza del file
Questo articolo è molto simile a quello in cui descrivo come salvare con JFileChooser in Java.
Ho però aggiunto qualche riga in più.
Nello specifico quelle che si occupano di controllare se già esiste un file con lo stesso nome.
import javax.swing.*;
import java.io.*;
import java.text.MessageFormat;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
public class SalvaArea extends JFrame {
public static void salva() {
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(fc);
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");
}
}
if (f.exists()) {
String msg = MessageFormat.format("The entry ''{0}'' already exists.\nDo you want to replace it?", new Object[]{f});
int r = JOptionPane.showConfirmDialog(null, msg, "Confirm", JOptionPane.YES_NO_OPTION);
if (r == JOptionPane.NO_OPTION) {
// Returns without approve the selection.
return;
}
}
try {
FileWriter file = new FileWriter(f, false);
PrintWriter out = new PrintWriter(file);
out.println(FrameArea.getJarea().getText() + "\n" + "Tot entrate: " + FrameArea.getfield9().getText() + "\nTot uscite: " + FrameArea.getfield10().getText() + "\nTOT: " + FrameArea.getfield15().getText() + "\nTot operazioni: " + FrameArea.getfield16().getText());
out.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(fc, e, "ERRORE", JOptionPane.ERROR_MESSAGE);
}
}
}
}
La prima differenza è nell'importazione del package import java.text.MessageFormat che ci servirà per la finestra di messaggio che appare nel caso in cui il file già esiste.
Qui potete vedere una descrizione del package: http://download.oracle.com/javase/6/docs/api/.
La seconda differenza è qua:
if (f.exists()) {
String msg = MessageFormat.format("The entry ''{0}'' already exists.\nDo you want to replace it?", new Object[]{f});
int r = JOptionPane.showConfirmDialog(null, msg, "Confirm", JOptionPane.YES_NO_OPTION);
if (r == JOptionPane.NO_OPTION) {
// Returns without approve the selection.
return;
}
}
Come vedete usiamo il metodo exists() su f per controllare se esiste.
Se è vero comparirà un messaggio in cui dovremmo scegliere se sovrascrivere o no.
In caso negativo farà un return chiudendo l'operazione senza fare nulla.
In caso affermativo passerà al blocco try/catch sottostante per scrivere il file.
Ultima differenza è alla riga:
FileWriter file = new FileWriter(f, false);
Qui ho impostato il parametro false invece che true.
Questo parametro decide se sovrascrivere il file completamente, oppure aggiungere il nuovo al testo precedente.
Con false il testo verrà completamente sovrascritto.
java jfilechooser save filewriter joptionpane
Commentami!