Вопрос по java – Добавление типа файла к файлу в Java с использованием JFileChooser

7

Я пытаюсь сохранить изображение с помощью JFileChooser. Я только хочу, чтобы пользователь мог сохранить изображение в формате JPG. Однако, если они не напечатают .jpg, он не будет сохранен как изображение. Можно ли как-нибудь добавить & quot; .jpg & quot; в конец файла?

<code>File file = chooser.getSelectedFile() + ".jpg";  
</code>

Не работает, когда я добавляю строку в файл.

Ваш Ответ

3   ответа
4

добавить расширение к выбранному файлу, а затем создатьFile объект с расширением, добавленным к нему.

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

Подразумевается в вашем вопросе, но только для того, чтобы охватить все базы: сначала нужно проверить, не существует ли расширение, например:

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

[Вы можете добавить & quot; .jpeg & quot; кif выше - это допустимое расширение для файлов JPEG]

Код ниже может или не может работать.File имеетtoString() это позволит его компилировать, но я бы предпочел использовать описанный выше способ, где я могу контролировать точное имя пути, которое я получаю.toString() документация дляFile объект немного неясен для меня, что именно он возвращает. В таких случаях я предпочитаю вызывать функцию, которая, как я знаю, возвращает то, что мне нужно, наверняка.

File file = new File( chooser.getSelectedFile() + ".jpg" ); 
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);
}
Договорились, что вы можете пропустить регулярные выражения, если хотите скорости.
Хорошее решение, чтобы покрыть все расширения однимif, но нужно добавить(?i) чтобы сделать его нечувствительным к регистру (поймать JPG, а также JPG):if (!path.matches("(?i).*\\.(jpg|jpeg)")), Также необходимо учитывать случай, когда выбранное (или набранное) имя файла не имеет расширения, гдеpath.lastIndexOf(".")возвращает -1 (например, с вводомtestкод изменит его наjpg, вместоtest.jpg.
Код собирается читать или записывать на диск, по сравнению с этим регулярное выражение станет бледным. Мне понравилось, как вы использовали регулярные выражения, чтобы поймать все возможные расширения.
10

File кString и создать новыйFile когда вы закончите?

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

Помните, что вам не нужно добавлять.jpg если он уже там.

...а такжеtoLowerCase() имя файла, которое пользователь выбрал перед проверкой на наличие расширения. Без этого код будет нарушен в Windows, где пользователь может (по какой-либо причине) ввести «myfile.JPG».
Спасибо, Джеффри :) К сожалению, я пока не могу голосовать. Знаете ли вы, почему имя формата требуется здесь: ImageIO.write (изображение, & quot; jpg & quot ;, файл); это, кажется, не имеет значения? Если вам нужно иметь формат файла в любом случае? Kingteeb
В своем коде вы можете настроить его ответ на мой. Проверить наличие нескольких расширений jpg. Его ответ будет работать. Однако он просто добавляет .jpg в конец файла, поэтому пример, если у вас есть: c: \ examplepath \ examplefile.txt, он превратит в: c: \ examplepath \ examplefile.txt.jpg
@Justin Накладные расходы на создание новогоStringBuilder должно быть незначительным, так как он выполняет действие только один раз.
Этот ответ сделает это. Однако сделайте filePath.concat (& quot; .jpg & quot;), чтобы избежать ненужной конструкции StringBuilder.

Похожие вопросы