Сохранить FileDialog в Java полосы расширения исходного файла - PullRequest
8 голосов
/ 28 февраля 2011

Я использую java.awt.FileDialog, чтобы создать диалог для сохранения файла.Проблема в том, что когда я указываю предлагаемое (по умолчанию) имя файла, FileDialog удаляет его расширение.Пример:

import java.awt.*;
import java.io.*;

public class SaveFile {
    public static void main(String[] args) {
        FileDialog fileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
        fileDialog.setFilenameFilter(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });
        fileDialog.setFile("Untitled.txt");
        fileDialog.setVisible(true);
        System.out.println("File: " + fileDialog.getFile());
    }
}

Я ожидаю, что при появлении FileDialog имя файла по умолчанию будет «Untitled.txt», но вместо этого это просто «Untitled».Когда пользователи нажимают Сохранить, я получаю имя файла без расширения.FileDialog делает это как на Windows, так и на OS X.

Я не понимаю.Почему FileDialog намеренно лишает расширения?Есть ли логическая причина для этого?Документация не обсуждает это.В качестве обходного пути я мог бы просто добавить расширение в строку, которую возвращает FileDialog, но все же это похоже на ошибку ...

(Обратите внимание, что я не могу использовать JFileChooser; мне нужен собственный AWD FileDialog.)

Ответы [ 4 ]

2 голосов
/ 22 сентября 2011

Я искал ответ на ту же самую проблему, которая появляется только на Mac. Вы должны либо жить с уродливой опцией JFileChooser (качели, легкий, а не естественный вид), либо иметь if (os - mac) и обрабатывать вещи по-другому, добавляя расширение файла в конец самостоятельно.

Это ошибка Mac Java AWT, которая, надеюсь, будет исправлена ​​в какой-то момент.

2 голосов
/ 28 февраля 2011

Это не для меня, в Windows 7, с Sun Java 1.5 и 1.6.

Поведение, которое я получаю, немного зависит от настройки «Скрыть расширения известных типов файлов» в проводнике Windows. Если это включено, то я не вижу расширения в диалоговом окне файла, как вы могли ожидать, но оно возвращает мне полное имя файла.

РЕДАКТИРОВАТЬ: Поймите, что я был неправ в отношении AWT и родных виджетов - путают AWT и Swing.

1 голос
/ 18 августа 2015

Вот пример того, как сохранить новый файл в указанный каталог и имя файла из FileDialog. Строки взяты из вектора Strings. У меня это работает!

public static void SaveFileTo(Vector<String> myLines) {
        FileOutputStream f = null;
        DataOutputStream h = null;
        FileDialog d = new FileDialog(new JFrame(), "Save", FileDialog.SAVE);
        d.setVisible(true);
        String dir;
        dir = d.getDirectory();
        File oneFile = new File(dir + d.getFile());
        try {
            oneFile.createNewFile();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            f = new FileOutputStream(oneFile);
            h = new DataOutputStream(f);
            for (String de : myLines) {
                h.writeBytes(de);               
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                h.close();
                f.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
0 голосов
/ 17 июня 2012

Используйте JFileChooser, но поместите это в начало программы:

    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
        e.printStackTrace();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...