How to save file using JFileChooser?
Asked Answered
T

4

15

I have a method in my application called "Save as" which Saves the image of my application on computer my into a file. I used the JFileChooser to let the users choose their desired location for saving the file. The problem is unless user explicitly types in the file format, it saves the file with no extension. How can I have formats like jpg, png in the File Type drop down menu.

and, how can i get extension from the File Type drop menu for saving my image file.

 ImageIO.write(image,extension,file);
Triadelphous answered 27/3, 2010 at 21:40 Comment(0)
T
16

Finally, I solved my own problem:

JFileChooser fc = new JFileChooser("C:/");
fc.addChoosableFileFilter(new JPGSaveFilter());
fc.addChoosableFileFilter(new JPEGSaveFilter());
fc.addChoosableFileFilter(new PNGSaveFilter());
fc.addChoosableFileFilter(new GIFSaveFilter());
fc.addChoosableFileFilter(new BMPSaveFilter());
fc.addChoosableFileFilter(new WBMPSaveFilter()); 

int retrieval = fc.showSaveDialog(null);

if (retrieval == JFileChooser.APPROVE_OPTION) {
  String ext = "";

  String extension = fc.getFileFilter().getDescription();

  if (extension.equals("*.jpg,*.JPG")) {
    ext = ".jpg";
  } else if (extension.equals("*.png,*.PNG")) {
    ext = ".png";
  } else if (extension.equals("*.gif,*.GIF")) {
    ext = ".gif";
  } else if (extension.equals("*.wbmp,*.WBMP")) {
    ext = ".wbmp";
  } else if (extension.equals("*.jpeg,*.JPEG")) {
    ext = ".jpeg";
  } else if (extension.equals("*.bmp,*.BMP")) {
    ext = ".bmp";
  }
}

Example Filter:

package example

import java.io.File;
import javax.swing.filechooser.FileFilter;

class JPGSaveFilter extends FileFilter {
  @Override
  public boolean accept(File f) {
    if (f.isDirectory()) {
      return false;
    }

    String s = f.getName().toLowerCase();

    return s.endsWith(".jpg");
  }

  @Override
  public String getDescription() {
    return "*.jpg,*.JPG";
  }
}
Triadelphous answered 28/3, 2010 at 13:10 Comment(0)
P
3

Prepare the file chooser filters:

    jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File X (.xxx)", "xxx"));
    jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File Y (.yyy)", "yyy"));
    jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File Z (.zzz)", "zzz"));

    // set default type
    jFileChooser.setFileFilter(jFileChooser.getChoosableFileFilters()[0]);

    // set default file
    jFileChooser().setSelectedFile(defaultFile);

After approve validation

//Add extension to Selected file 
File file = new File(jFileChooser().getSelectedFile().getCanonicalPath() + "." + ((FileNameExtensionFilter) jFileChooser().getFileFilter()).getExtensions()[0]);

Could be a good idea validate if the selected file come with extension.

Postpaid answered 22/5, 2013 at 1:59 Comment(2)
Can I just say, LOD principles go out the window in this answer.Greensboro
OMG LOD, again! Sorry, it was not me, I just another guy that facing this.Skinhead
A
1

Use JFileChoose.SetFileFilter example: http://www.java2s.com/Code/JavaAPI/javax.swing/JFileChoosersetFileFilterFileFilterfilter.htm

Arrowy answered 27/3, 2010 at 22:14 Comment(3)
ok.. setFileFilter will show the Extension in File Type drop down Menu. but how to retrieve or use selected Extension form this File Type Drop Menu..Triadelphous
Once you have the selected file, it should be as easy as String ext = file.getName().substring(file.getName().lastIndexOf("."));Fend
That's a pretty crazy URL... it contains "java", "file", and "filter" three times each.Canara
C
0

I think I got better solution. Will explain it with sample code fragments.

This is how I set file filter:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));.

After this the main saving line:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Of course the most important is this fragment: jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "").

The only thing I don't like is, that I could not find any method like 'getExtension' which means that You cannot have any nice description without unnecessary troubles with strings.


Ok, got it. You can do something like that: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "").

Unfortunately it's not so beautiful, but seems to work like a charm.

Cami answered 30/8, 2014 at 20:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.