Set default saving extension with JFileChooser

后端 未结 5 1091
借酒劲吻你
借酒劲吻你 2021-02-07 10:12

I\'m trying to save a file using JFileChooser. However, I seem to be having some trouble with it. Here\'s my code:

    if (e.getSource() == saveMenu         


        
相关标签:
5条回答
  • 2021-02-07 10:17

    You should try this. I did this and it worked.

    FileOutputStream fileOut =  new FileOutputStream(file1+".xml");
    hwb.write(fileOut);
    fileOut.close();
    System.out.println("\n Your file has been generated!");
    JOptionPane.showMessageDialog(this,"File Created.");
    
    0 讨论(0)
  • 2021-02-07 10:30

    Just to make things clear as to how to use the JFileChooser to save files.

    //set it to be a save dialog
     chooser.setDialogType(JFileChooser.SAVE_DIALOG);
    //set a default filename (this is where you default extension first comes in)
     chooser.setSelectedFile(new File("myfile.xml"));
    //Set an extension filter, so the user sees other XML files
     chooser.setFileFilter(new FileNameExtensionFilter("xml file","xml"));
    

    now the user was encouraged to save the item as an xml file in this example, but they may not have actually set it.

    if(chooser.showSaveDialog(this) == jFileChooser.APPROVE_OPTION) {
        String filename = chooser.getSelectedFile().toString();
        if (!filename .endsWith(".xml"))
            filename += ".xml";
    
        //DO something with filename
    }
    

    This is the most simple case, if you have multiple possible file formats, then you should catch the selected filter, verify THAT extension, and also save the file according to the selected format. but if you are doing that, you are probably an advanced java programmer and not utilizing this post.

    0 讨论(0)
  • 2021-02-07 10:30

    How about something like this:

        else if (e.getSource() == saveMenu) {
            int returnVal = chooser.showSaveDialog(Simulator.this);
    
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
    
                String fname = file.getAbsolutePath();
    
                if(!fname.endsWith(".xml") ) {
                    file = new File(fname + ".xml");
    
                if(!file.createNewFile()) {
                    /*check with user??*/
                }
    
    0 讨论(0)
  • 2021-02-07 10:40

    You should try this:

    if(!file.getName().contains(".")) file = new File(file.toString() + ".xml");
    
    0 讨论(0)
  • 2021-02-07 10:43

    As you've noticed, JFileChooser doesn't enforce the FileFilter on a save. It will grey-out the existing non-XML file in the dialog it displays, but that's it. To enforce the filename, you have to do all the work. (This isn't just a matter of JFileChooser sucking -- it's a complex problem to deal with. Your might want your users to be able to name their files xml.xml.xml.xml.)

    In your case, I recommend using FilenameUtils from Commons IO:

    File file = chooser.getSelectedFile();
    if (FilenameUtils.getExtension(file.getName()).equalsIgnoreCase("xml")) {
        // filename is OK as-is
    } else {
        file = new File(file.toString() + ".xml");  // append .xml if "foo.jpg.xml" is OK
        file = new File(file.getParentFile(), FilenameUtils.getBaseName(file.getName())+".xml"); // ALTERNATIVELY: remove the extension (if any) and replace it with ".xml"
    }
    

    There's also some ideas for what to do if you want multiple types in the save dialog here: How to save file using JFileChooser?

    0 讨论(0)
提交回复
热议问题