2012-05-06 15 views

Odpowiedz

9

Dlaczego nie przekonwertować File na String i utworzyć nową File, kiedy skończysz?

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

Pamiętaj, że nie trzeba dodawać .jpg jeśli jest już tam.

+0

Ta odpowiedź zrobi to. Jednak należy użyć pliku filePath.concat (".jpg"), aby uniknąć niepotrzebnej konstrukcji StringBuilder. – Justin

+0

@Justin Narzut tworzenia nowego 'StringBuilder' powinien być nieistotny, ponieważ wykonuje tylko raz akcję. – Jeffrey

+0

Dziękuję Jeffrey :) Niestety nie mogę jeszcze głosować w górę. Czy wiesz, dlaczego \t \t \t \t \t nazwa formatu jest wymagana tutaj: ImageIO.write (obraz, "jpg", plik); to nie robi różnicy? Jeśli mimo to musisz mieć format pliku? – Kingteeb

1

Najlepszym rozwiązaniem byłoby sprawdzenie dopuszczalnego wpisu. Jeśli nie zostanie znaleziony, należy wymienić plik zastępujący, zamiast pisać na nim.

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

Dobre rozwiązanie, aby objąć wszystkie rozszerzenia jednym 'if', ale trzeba dodać' (? I) ', aby uczynić go niewrażliwym na wielkość liter (catch JPG, a także jpg):' if (! Path.matches ("(? i). * \\. (jpg | jpeg) "))'.Należy również uwzględnić przypadek, w którym wybrana (lub wpisana) nazwa pliku nie ma rozszerzenia, gdzie 'path.lastIndexOf (". ")' Zwraca -1 (np. Z wejściem 'test', kod zmieni to do 'jpg', zamiast' test.jpg'. – chr

+0

Uzgodniono, że jeśli chcesz prędkości, możesz pominąć wyrażenie regularne, – Justin

+0

Kod odczytuje lub zapisuje na dysku, regex będzie blednąć w porównaniu do Podobało mi się sposób, w jaki korzystałeś z wyrażenia regularnego, aby wychwycić wszystkie możliwe rozszerzenia. – chr

4

To działa, jeśli nie w dwóch etapach: dodać rozszerzenie do wybranego pliku, a następnie utworzyć File obiekt z rozszerzeniem załączonym do niego.

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

Implikowane w swoim pytaniu, ale tylko na pokrycie wszystkich baz: trzeba sprawdzić, czy rozszerzenie nie jest już tam pierwszy, np:

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

[Możesz dodać”.jpeg "do powyższego if - jest to poprawne rozszerzenie plików JPEG]

Poniższy kod może, ale nie musi działać. File ma toString(), który pozwoli mu skompilować, ale wolałbym użyć powyższej metody, gdzie mogę kontrolować dokładną nazwę ścieżki, którą otrzymuję. Dokumentacja toString() dla obiektu File jest dla mnie niejasna, co dokładnie zwraca. W takich przypadkach wolę wywoływać funkcję, która na pewno zwraca to, czego potrzebuję na pewno.

File file = new File(chooser.getSelectedFile() + ".jpg"); 
Powiązane problemy