I want to save a spreadsheet file to a user custom file folder, people suggest to use JFileChooser
, but I actually don’t know how to achieve it. I have my current example code here:
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Example { public static void main(String[] args) throws FileNotFoundException, IOException { XSSFWorkbook workbook; File file = new File("example.xlsx"); if (file.exists() == false) { workbook = new XSSFWorkbook(); XSSFSheet exampleSheet = workbook.createSheet("1"); XSSFRow firstRow = exampleSheet.createRow(1); XSSFCell cell = firstRow.createCell(0); cell.setCellValue("value"); try ( //Write the workbook in file system FileOutputStream out = new FileOutputStream(file)) { workbook.write(out); } } else { // Sheet already exists System.out.println("File already exist"); } } }
Currently it only save the file to the default project directory. But I want it to be saved to a user selected path with a user customized filename. JFileChooser
seems like a good choice, but can someone show me how do I use it in my case?
Advertisement
Answer
public class Example { static String fileDictName = ""; public static void main(String[] args) throws FileNotFoundException, IOException { XSSFWorkbook workbook; JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("Open the file"); //name for chooser FileFilter filter = new FileNameExtensionFilter("Files", ".xlsx"); //filter to show only that fileChooser.setAcceptAllFileFilterUsed(false); //to show or not all other files fileChooser.addChoosableFileFilter(filter); fileChooser.setSelectedFile(new File(fileDictName)); //when you want to show the name of file into the chooser fileChooser.setVisible(true); int result = fileChooser.showOpenDialog(fileChooser); if (result == JFileChooser.APPROVE_OPTION) { fileDictName = fileChooser.getSelectedFile().getAbsolutePath(); } else { return; } File file = new File(fileDictName); if (file.exists() == false) { workbook = new XSSFWorkbook(); XSSFSheet exampleSheet = workbook.createSheet("1"); XSSFRow firstRow = exampleSheet.createRow(1); XSSFCell cell = firstRow.createCell(0); cell.setCellValue("value"); try ( //Write the workbook in file system FileOutputStream out = new FileOutputStream(file)) { workbook.write(out); } } else { // Sheet already exists System.out.println("File already exist"); } } }
When we want to use it to save a file, we need:
JFileChooser fileChooser = new JFileChooser(); FileFilter filter = new FileNameExtensionFilter("Files", ".xlsx"); fileChooser.addChoosableFileFilter(filter); fileChooser.setAcceptAllFileFilterUsed(false); fileChooser.setDialogTitle("Save the dictionary file"); fileChooser.setSelectedFile(new File(fileDictName)); int userSelection = fileChooser.showSaveDialog(fileChooser); if (userSelection == JFileChooser.APPROVE_OPTION) { fileDictName = fileChooser.getSelectedFile().getAbsolutePath(); }