Добавлять.расширение txt в JFileChooser
у меня есть метод, который получает текст из JTextArea, создает файл и пишет текст на нем как код ниже:
public void createTxt() {
TxtFilter txt = new TxtFilter();
JFileChooser fSave = new JFileChooser();
fSave.setFileFilter(txt);
int result = fSave.showSaveDialog(this);
if(result == JFileChooser.APPROVE_OPTION) {
File sFile = fSave.getSelectedFile();
FileFilter selectedFilter = fSave.getFileFilter();
String file_name = sFile.getName();
String file_path = sFile.getParent();
try{
if(!sFile.exists()) {
sFile.createNewFile();
BufferedWriter out = new BufferedWriter(new FileWriter(sFile));
out.write(jTextArea1.getText());
out.close();
JOptionPane.showMessageDialog(null, "Warning file • " + file_name + " • created succesfully in n" + file_path);
} else {
String message = "File • " + file_name + " • already exist in n" + file_path + ":n" + "Do you want to overwrite?";
String title = "Warning";
int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
if(reply == JOptionPane.YES_OPTION){
sFile.delete();
sFile.createNewFile();
BufferedWriter out = new BufferedWriter(new FileWriter(sFile));
out.write(jTextArea1.getText());
out.close();
JOptionPane.showMessageDialog(null, "File • " + file_name + " • overwritten succesfully in n" + file_path);
}
}
}
catch(IOException e) {
System.out.println("Error");
}
}
}
и txt файловый фильтр
public class TxtFilter extends FileFilter{
@Override
public boolean accept(File f){
return f.getName().toLowerCase().endsWith(".txt")||f.isDirectory();
}
@Override
public String getDescription(){
return "Text files (*.txt)";
}
}
фильтр файлов для txt работает нормально, но я хочу добавить ".расширение " txt " при вводе имени файла.
Как мне изменить свой код?
4 ответов
обновление
Вы указали мне, что проверка существующих файлов не работает. Извините, я не подумал об этом, когда предложил вам заменить BufferedWriter
линии.
Теперь замените это:
File sFile = fSave.getSelectedFile();
С:
File sFile = new File(fSave.getSelectedFile()+".txt");
С этой заменой теперь не требуется заменять строку BufferedWriter
добавление .txt
расширение. Затем замените эту строку строкой в коде, который вы разместили (с BufferedWriter out = new BufferedWriter(new FileWriter(sFile));
вместо BufferedWriter out = new BufferedWriter(new FileWriter(sFile+".txt"));
).
теперь программа должна работать, как ожидалось.
я забыл упомянуть, что вы должны комментировать строку:
sFile.createNewFile();
таким образом, вы создаете пустой файл с классом File
.
сразу после этой строки есть: BufferedWriter out = new BufferedWriter(new FileWriter(sFile));
.
С помощью этой строки вы снова создаете тот же файл. Процедура написания происходит два раза! Я думаю, что бесполезно вставлять две инструкции, которые делают то же самое задача.
также на BufferedWriter
конструктор, вы можете добавить строку для имени файла (это невозможно на File
конструктор), вот почему я добавил +".txt"
(расширение) к sFile
.
Я просто использую это
File fileToBeSaved = fileChooser.getSelectedFile();
if(!fileChooser.getSelectedFile().getAbsolutePath().endsWith(suffix)){
fileToBeSaved = new File(fileChooser.getSelectedFile() + suffix);
}
это функция утилиты из одной из моих программ, которую вы можете использовать вместо JFileChooser.getSelectedFile
, чтобы получить расширение тоже.
/**
* Returns the selected file from a JFileChooser, including the extension from
* the file filter.
*/
public static File getSelectedFileWithExtension(JFileChooser c) {
File file = c.getSelectedFile();
if (c.getFileFilter() instanceof FileNameExtensionFilter) {
String[] exts = ((FileNameExtensionFilter)c.getFileFilter()).getExtensions();
String nameLower = file.getName().toLowerCase();
for (String ext : exts) { // check if it already has a valid extension
if (nameLower.endsWith('.' + ext.toLowerCase())) {
return file; // if yes, return as-is
}
}
// if not, append the first extension from the selected filter
file = new File(file.toString() + '.' + exts[0]);
}
return file;
}
Я сделал эту функцию для этого :
/**
* Add extension to a file that doesn't have yet an extension
* this method is useful to automatically add an extension in the savefileDialog control
* @param file file to check
* @param ext extension to add
* @return file with extension (e.g. 'test.doc')
*/
private String addFileExtIfNecessary(String file,String ext) {
if(file.lastIndexOf('.') == -1)
file += ext;
return file;
}
тогда вы можете использовать функцию, например, таким образом:
JFileChooser fS = new JFileChooser();
String fileExt = ".txt";
addFileExtIfNecessary(fS.getSelectedFile().getName(),fileExt)