2012-05-06 22 views
7

JFileChooserを使用してイメージを保存しようとしています。私は、ユーザーがjpgとしてイメージを保存できるようにしたい。しかし、それらが.jpgと入力しなければ画像として保存されません。ファイルの最後に何らかの形で「.jpg」を付けることはできますか?JFileChooserを使用してJavaのファイルにファイルタイプを追加する

File file = chooser.getSelectedFile() + ".jpg"; 

文字列をファイルに追加すると機能しません。

答えて

9

FileStringに変換してから、新しいFileを作成してみませんか?

File f = chooser.getSelectedFile(); 
String filePath = f.getAbsolutePath(); 
if(!filePath.endsWith(".jpg")) { 
    f = new File(filePath + ".jpg"); 
} 

は、あなたはそれがすでにあるかどう.jpgを追加する必要はありません、覚えておいてください。

+0

この回答は役に立ちます。ただし、不要なStringBuilderの構築を避けるためにfilePath.concat( "。jpg")を実行してください。 – Justin

+0

@Justin新しい 'StringBuilder'を作成するオーバーヘッドは、アクションを1回しか実行していないので無視してください。 – Jeffrey

+0

ありがとうございましたJeffrey :)悲しいことに私はまだ投票できません。理由を知っていますか?\t \t \t \t \tここで、フォーマット名が必要です。ImageIO.write(image、 "jpg"、file);それは違いを生じさせるようではありませんか?とにかくファイルに書式を設定する必要がある場合は? – Kingteeb

1

最良の方法は、受け入れ可能なエントリを確認することです。見つからない場合は、ファイルの上書きの代わりにファイルの置き換えを置き換えます。

File f = chooser.getSelectedFile().getAbsolutePath(); 
String path = f.getAbsolutePath(); 
if (!path.matches(".*\\.(jpg|jpeg)")) { 
    // If the extension isn't there. We need to replace it 
    path = path.substring(0, path.lastIndexOf(".") + 1).concat("jpg"); 
    f = new File(path); 
} 
+1

すべての拡張を1つの 'if'でカバーする良い解決策ですが、大文字と小文字を区別しないように'(?i) 'を追加する必要があります(JPGとjpgをキャッチします):if(!path.matches(" ?i)。* \\。(jpg | jpeg) "))'。また、選択された(または型付けされた)ファイル名が拡張子を持たない場合、 'path.lastIndexOf("。 ")'が-1を返す場合も考慮する必要があります(例えば、 'test'を入力すると、 'test.jpg'の代わりに' jpg'を使います。 – chr

+0

スピードが必要な場合は、正規表現を一気にスキップすることで合意しました。 – Justin

+0

コードがディスクに読み書きしようとしています。正規表現はすべての可能な拡張をキャッチするために正規表現を使用した方法が気に入っていました。 – chr

4

それはあなたが2つの段階で行う場合には動作します。それに追加の拡張子を持つFileオブジェクトを作成し、選択したファイルに拡張子を追加します。

String withExtension = chooser.getSelectedFile().getAbsolutePath() + ".jpg"; 
File file = new File(withExtension) 
あなたの質問に写っ

が、ちょうどすべての拠点カバーする:拡張子が最初にすでに存在していないかどうかを確認する必要がある、例えば:

String withExtension = chooser.getSelectedFile().getAbsolutePath(); 
if(!withExtension.toLowerCase().endsWith(".jpg")) 
    withExtension += ".jpg"; 

を[あなたは「追加する.JPEGをすることができ"をifにアップロード - 有効なJPEGファイルの拡張子です。

以下のコードは動作する場合と動作しない場合があります。 FileにはtoString()がありますが、コンパイルできますが、上記の方法を使用して、正確なパス名を制御できます。 FileオブジェクトのtoString()ドキュメントは、正確に何が返ってくるかについて私には不明な点が少しあります。このようなケースでは、私が知っている関数を呼び出して、私が確かに必要なものを返すことを好む。

File file = new File(chooser.getSelectedFile() + ".jpg"); 
関連する問題