Bir dosyayı kaydetmek için bir iletişim kutusu oluşturmak için java.awt.FileDialog kullanıyorum. Sorun, önerilen (varsayılan) dosya adını belirttiğimde, FileDialog uzantısını çıkarmasıdır. Örnek:Java içinde FileDialog dosyalarını kaydeder ilk dosya uzantısı
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());
}
}
Ben FileDialog göründüğünde, varsayılan dosya adı "Untitled.txt" olduğu beklenebilir, ancak bunun yerine sadece "Adsız" dir. Kullanıcılar Kaydet'i tıkladığında, uzantı olmadan bir dosya adı alırım. FileDialog bunu hem Windows hem de OS X üzerinde yapar.
Anlamadım. FileDialog neden kasıtlı olarak uzantıyı soydu? Bunun mantıklı bir nedeni var mı? Belgeler bunu tartışmıyor. Çözüm olarak, ben sadece
(ı JFileChooser kullanamazsınız unutmayın.; ı yerli AWT FileDialog gerekir) ... FileDialog verir, ama yine de bu bir böcek gibi görünüyor dizeye uzantısı ekleyebilir
İçgörü için teşekkür ederiz. Windows'daki davranışların "Uzantıları gizle" ayarına bağlı olduğu konusunda gerçekten haklısınız. Ve haklısınız, "Uzantıları gizle" açık olsa bile ve kullanıcı uzantıyı açıkça eklemese bile dosya adını uzantıya döndürür. – vocaro
Sorun, Java'nın Mac sürümüne yalıtılmış görünüyor. Mac ayrıca bir "Uzantıları gizle" ayarına sahiptir; Ancak, bu ayar açıksa, uzantı iletişim metin alanına gizlenir, ancak döndürülen dize uzantı İÇERMEZ. Bu açıkça bir çapraz platform hatası, bu yüzden Apple ile bir rapor yazacağım. Yardımın için tekrar teşekkürler. – vocaro
@vocaro Rapor mu kaydettin? Herhangi bir bağlantı var mı? Bu sorunu nasıl çözdünüz? – Igor