如何在Java应用程序中创build一个新的Excel文件并将其保存在指定位置?

我想要创build一个新的excel文件,以便用户在运行时提供文件的名称,并将此文件保存在用户所需的位置。 我已经尝试了一些代码,但它创build一个同名的文件,每次都在同一个位置。它不会要求用户input文件名和位置。

private void buttonCALCULATEActionPerformed(java.awt.event.ActionEvent evt) { filename="D:\\test.xls" ; HSSFWorkbook hwb=new HSSFWorkbook(); HSSFSheet sheet = hwb.createSheet("Report in Excel"); HSSFRow rowhead=sheet.createRow((short)0); rowhead.createCell((short) 0).setCellValue("Plot Id"); rowhead.createCell((short) 1).setCellValue("Species Name"); FileOutputStream fileOut = new FileOutputStream(filename); hwb.write(fileOut); fileOut.close(); System.out.println("\n Your Excel file has been generated!"); //String name1=" "; FileSave(); } public void FileSave() throws IOException { JFileChooser chooser=new JFileChooser("./"); FileNameExtensionFilter filter = new FileNameExtensionFilter("Excel files",".xls"); chooser.addChoosableFileFilter(filter); int returnVal1=chooser.showSaveDialog(this); // chooser.setFileFilter(filter); chooser.setFileSelectionMode(chooser.FILES_ONLY); chooser.setDialogTitle("Save File"); chooser.setCurrentDirectory(new File(System.getProperties().getProperty("user.home"))); chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(final File f) { return f.isDirectory()|| file.getAbsolutePath().endsWith(".xls"); } public String getDescription(){ return "Excel files (*.xls)"; } } ); if (returnVal1 == JFileChooser.APPROVE_OPTION) { file1 = chooser.getSelectedFile(); } } 

int returnVal1=chooser.showSaveDialog(this); 这个immeditaly之前if (returnVal1 == JFileChooser.APPROVE_OPTION)

 public void FileSave() throws IOException { JFileChooser chooser = new JFileChooser("./"); FileNameExtensionFilter filter = new FileNameExtensionFilter("Excel files", ".xls"); chooser.addChoosableFileFilter(filter); // chooser.setFileFilter(filter); chooser.setFileSelectionMode(chooser.FILES_ONLY); chooser.setDialogTitle("Save File"); chooser.setCurrentDirectory(new File(System.getProperties().getProperty("user.home"))); chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(final File f) { return f.isDirectory() || file.getAbsolutePath().endsWith(".xls"); } public String getDescription() { return "Excel files (*.xls)"; } }); int returnVal1 = chooser.showSaveDialog(this); if (returnVal1 == JFileChooser.APPROVE_OPTION) { file1 = chooser.getSelectedFile(); } } 

更改FileSave以返回File (如果用户取消了文件select器,则返回null

 public File FileSave() throws IOException { File file1 = null; //... return file1; } 

在您尝试保存之前询问文件…

 private void buttonCALCULATEActionPerformed(java.awt.event.ActionEvent evt) { File file = FileSave(); if (file != null) { HSSFWorkbook hwb = new HSSFWorkbook(); HSSFSheet sheet = hwb.createSheet("Report in Excel"); HSSFRow rowhead = sheet.createRow((short) 0); rowhead.createCell((short) 0).setCellValue("Plot Id"); rowhead.createCell((short) 1).setCellValue("Species Name"); try (FileOutputStream fileOut = new FileOutputStream(file)) { hwb.write(fileOut); } catch (IOException exp) { exp.printStackTrace(); } System.out.println("\n Your Excel file has been generated!"); } } 

您可能希望阅读Java TM编程语言的代码约定 ,这将使人们更容易阅读代码并阅读其他代码

我试过这个,它的工作公共无效FileSave()抛出IOException {

  JFileChooser chooser=new JFileChooser("."); FileNameExtensionFilter filter = new FileNameExtensionFilter("Excel files","xls","excel"); chooser.addChoosableFileFilter(filter); chooser.setFileFilter(filter); chooser.setFileSelectionMode(chooser.FILES_AND_DIRECTORIES); chooser.setDialogTitle("Save File"); chooser.setCurrentDirectory(new File(System.getProperties().getProperty("user.home"))); chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(final File f) { return f.isDirectory()|| file.getAbsolutePath().endsWith(".xls"); } public String getDescription() { return "Excel files (*.xls)"; } }); int returnVal1=chooser.showSaveDialog(this); if (returnVal1 == JFileChooser.APPROVE_OPTION) { file1 = chooser.getSelectedFile(); if(!file1.exists()) { FileOutputStream fileOut = new FileOutputStream(file1); hwb.write(fileOut); fileOut.close(); System.out.println("\n Your Excel file has been generated!"); JOptionPane.showMessageDialog(this,"File Created."); } else if(file1.exists()) { int res=JOptionPane.showConfirmDialog(this,"File already exists.Do you wish to overwrite?"); if(res == JOptionPane.YES_OPTION) { FileOutputStream fileOut = new FileOutputStream(file1); hwb.write(fileOut); fileOut.close(); System.out.println("\n Your Excel file has been generated!"); JOptionPane.showMessageDialog(this,"File Created."); } else if(res == JOptionPane.NO_OPTION) { int returnVal2=chooser.showSaveDialog(this); if (returnVal2 == JFileChooser.APPROVE_OPTION) { File file2 = chooser.getSelectedFile(); if(!file2.exists()) { FileOutputStream fileOut = new FileOutputStream(file2); hwb.write(fileOut); fileOut.close(); System.out.println("\n Your Excel file has been generated!"); JOptionPane.showMessageDialog(this,"File Created."); } } } else if (res == JOptionPane.CANCEL_OPTION) { JOptionPane.showMessageDialog(this, "User cancelled operation."); } } } // return file1; }