我有一个从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”扩展名。
如何修改我的代码?
答案 0 :(得分:17)
我只是用这个
File fileToBeSaved = fileChooser.getSelectedFile();
if(!fileChooser.getSelectedFile().getAbsolutePath().endsWith(suffix)){
fileToBeSaved = new File(fileChooser.getSelectedFile() + suffix);
}
答案 1 :(得分:6)
<强>更新强>
您指出我检查现有文件不起作用。对不起,当我建议您更换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
。
答案 2 :(得分:3)
这是我可以使用的其中一个程序的实用程序功能,而不是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;
}
答案 3 :(得分:1)
我为此目的完成了这个功能:
/**
* 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)