web-dev-qa-db-ja.com

JFileChooserを使用してファイルを保存する方法は?

アプリケーションに「名前を付けて保存」というメソッドがあり、コンピューター上のアプリケーションの画像をファイルに保存します。 JFileChooserを使用して、ユーザーがファイルを保存する場所を選択できるようにしました。問題は、ユーザーがファイル形式を明示的に入力しない限り、拡張子なしでファイルを保存することです。 [ファイルタイプ]ドロップダウンメニューでjpg、pngなどの形式を使用するにはどうすればよいですか。

また、画像ファイルを保存するために[ファイルタイプ]ドロップメニューから拡張子を取得するにはどうすればよいですか。

 ImageIO.write(image,extension,file);
13
Lokesh Kumar

最後に、私は自分の問題を解決しました:

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";
  }
}

フィルタの例:

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";
  }
}
16
Lokesh Kumar

ファイルチューザーフィルターを準備します。

    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);

検証を承認した後

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

選択したファイルに拡張子が付いているかどうかを検証することをお勧めします。

3
Daniel De León
1
Pierre

私はより良い解決策を得たと思います。サンプルコードフラグメントで説明します。

これは私がファイルフィルターを設定する方法です:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));

この後、主な節約ライン:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));

もちろん、最も重要なのは次のフラグメントです:jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "")

私が気に入らないのは、「getExtension」のようなメソッドが見つからなかったことだけです。つまり、文字列に不必要な問題がなければ、Niceの説明を作成することはできません。


はい、わかった。あなたはそのようなことをすることができます:jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "")

残念ながら、それほど美しくはありませんが、魅力のように機能しているようです。

0
kcpr