2012-05-06 10 views
7

Ich versuche, ein Bild mit einem JFileChooser zu speichern. Ich möchte nur, dass der Benutzer das Bild als JPG speichern kann. Wenn sie jedoch nicht .jpg eingeben, wird sie nicht als Bild gespeichert. Ist es möglich, ".jpg" an das Ende der Datei anzuhängen?Anhängen des Dateityps an eine Datei in Java mit JFileChooser

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

Funktioniert nicht, da ich eine Zeichenfolge zu einer Datei hinzufüge.

Antwort

9

Warum konvertieren Sie nicht die File in eine String und erstellen Sie eine neue File, wenn Sie fertig sind?

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

Denken Sie daran, Sie brauchen nicht zu den .jpg hinzufügen, wenn es bereits vorhanden ist.

+0

Diese Antwort wird es tun. Verwenden Sie filePath.concat (". Jpg"), um eine unnötige StringBuilder-Konstruktion zu vermeiden. – Justin

+0

@Justin Der Aufwand beim Erstellen eines neuen 'StringBuilder' sollte vernachlässigbar sein, da er die Aktion nur einmal ausführt. – Jeffrey

+0

Danke Jeffrey :) Leider kann ich noch nicht abstimmen. Weißt du, warum \t \t \t \t \t der Formatname ist hier erforderlich: ImageIO.write (Bild, "jpg", Datei); Es scheint keinen Unterschied zu machen. Wenn Sie das Format trotzdem in der Datei haben müssen? – Kingteeb

1

Der beste Ansatz wäre, nach einem akzeptablen Eintrag zu suchen. Wenn man nicht gefunden wird, ersetzen Sie die Dateierweiterung, anstatt darüber zu schreiben.

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

Eine gute Lösung, um alle Erweiterungen mit einem 'if' zu bedecken, aber" (? I) 'hinzuzufügen, um Groß- und Kleinschreibung zu vermeiden (jpg und jpg fangen):' if (! Path.matches ("(? i). * \\. (jpg | jpeg) "))'.Außerdem muss der Fall berücksichtigt werden, in dem der ausgewählte (oder eingegebene) Dateiname keine Erweiterung hat, wobei 'path.lastIndexOf (". ")' -1 zurückgibt (z. B. mit der Eingabe "test", der Code ändert sie zu "jpg", anstelle von "test.jpg". – chr

+0

Vereinbart eine andere Sache, die Sie tun können, ist Regex alle zusammen überspringen, wenn Sie Geschwindigkeit wollen. – Justin

+0

Der Code ist im Begriff zu lesen oder auf die Festplatte schreiben, wird die Regex im Vergleich zu blass Das. Ich mochte die Art, wie Sie die Regex verwendet, um alle möglichen Erweiterungen zu erfassen. – chr

4

Es funktioniert, wenn Sie in zwei Schritten tun: in Erweiterung ausgewählte Datei, dann erstellen File Objekt mit der Erweiterung angehängt.

String withExtension = chooser.getSelectedFile().getAbsolutePath() + ".jpg"; 
File file = new File(withExtension) 

in Ihrer Frage Implizite, sondern nur alle Grundlagen abzudecken: Notwendigkeit zu prüfen, ob die Erweiterung nicht bereits erste ist, zum Beispiel:

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

[Möglicherweise möchten Sie „.jpeg hinzufügen "an die if oben - es ist eine gültige Erweiterung für JPEG-Dateien)

Der folgende Code kann oder kann nicht funktionieren. File hat eine toString(), die es ermöglicht, zu kompilieren, aber ich würde lieber die Methode oben verwenden, wo ich den genauen Pfadnamen, den ich bekomme, kontrollieren kann. Die toString() Dokumentation für das Objekt File ist ein bisschen unklar für mich, was genau es zurückgibt. In Fällen wie diesem, ziehe ich es vor, eine Funktion zu nennen, von der ich weiß, dass sie das zurückgibt, was ich sicher brauche.

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