Alb*_*sut 8 java swing 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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
和一个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)";
}
}
Run Code Online (Sandbox Code Playgroud)
txt的文件过滤器工作正常但我想要的是在输入文件名时添加".txt"扩展名.
如何修改我的代码?
小智 18
我只是用它
File fileToBeSaved = fileChooser.getSelectedFile();
if(!fileChooser.getSelectedFile().getAbsolutePath().endsWith(suffix)){
fileToBeSaved = new File(fileChooser.getSelectedFile() + suffix);
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
您指出我检查现有文件不起作用.对不起,当我建议你更换BufferedWriter线路时,我没想到.现在,替换这个:
File sFile = fSave.getSelectedFile();
Run Code Online (Sandbox Code Playgroud)
有:
File sFile = new File(fSave.getSelectedFile()+".txt");
Run Code Online (Sandbox Code Playgroud)
以此替代,它现在没有需要更换的线BufferedWriter,增加.txt了扩展.然后,将该行替换为您发布的代码中的行(BufferedWriter out = new BufferedWriter(new FileWriter(sFile));而不是BufferedWriter out = new BufferedWriter(new FileWriter(sFile+".txt"));).
现在程序应该按预期工作.
我忘了提到你必须评论这条线:
sFile.createNewFile();
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您将使用该类创建一个空文件File.
就在这一行之后,有:BufferedWriter out = new BufferedWriter(new FileWriter(sFile));.使用此行,您将再次创建相同的文件.写作程序正在发生两次!我认为插入两个执行相同任务的指令是没用的.
此外,在BufferedWriter构造函数上,您可以为文件名追加一个字符串(在File构造函数中不可能),这就是我添加+".txt"(扩展名)的原因sFile.