package FileOperation; import Main.MainFrame; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileNameExtensionFilter; /** *@description 整合,实现对文件菜单下的全部操作 * @author 小路 * @date 2013-05-07 */ public class FileOperation { private MainFrame mf; public FileOperation(MainFrame mf) { this.mf = mf; } //实现把目标文本内容读到当前文本框中的方法,需要把被打开的文件的路径保存下来 public void readTo() { JFileChooser chooser = new JFileChooser("C:/Documents and Settings/Administrator/桌面/仿记事本程序所建文件夹"); chooser.setSelectedFile(new File("*.txt"));//设置默认选中文件名称 FileNameExtensionFilter filter = new FileNameExtensionFilter("txt & TXT文本文件", "txt", "TXT");//设置可选文件后缀名 chooser.setAcceptAllFileFilterUsed(false);//取消所有文件选项 chooser.setFileFilter(filter); while(chooser.showOpenDialog(mf)==0) { //此时文件肯定是.txt格式或者.TXT格式的,因此不需要再判断后缀名了,只需要判断是否选择了文档文件 File file = chooser.getSelectedFile(); mf.set_tempfile(file);//保存当前打开的文件的路径 if(file.exists()) { mf.setTitle(file.getName()); try { BufferedReader reader = new BufferedReader(new FileReader(file.getAbsoluteFile())); try { String tmp = reader.readLine(); while(tmp!=null) { mf.getMainText().append(tmp+"\n"); tmp = reader.readLine(); } } catch (IOException ex) { JOptionPane.showMessageDialog(mf, "读取文件失败!"); } //读出来 } catch (FileNotFoundException ex) { JOptionPane.showMessageDialog(mf, "获取文件路径失败!"); } break; } } //成功读取文件之后让changed初始值为false mf.set_changed(false); } //实现把当前文本框的文字写入到目标路径下的方法 public Boolean writeBack(File file) { try { file.createNewFile(); FileWriter writer = new FileWriter(file); BufferedWriter bufferwriter = new BufferedWriter(writer); mf.getMainText().selectAll(); String [] txt = mf.getMainText().getSelectedText().split("\n"); for(int i = 0;i<txt.length;i++) { bufferwriter.write(txt[i]); bufferwriter.newLine(); } bufferwriter.close(); writer.close(); mf.set_changed(false);//回写一次之后,此时当前文本没有被修改 return true; } catch (IOException ex) { JOptionPane.showMessageDialog(mf, "保存文件失败!"); return false; } } //实现删除文件 public void deleteFile(File file) { if(!file.delete()) { JOptionPane.showMessageDialog(mf, "退出时删除文件出错", "错误",JOptionPane.ERROR_MESSAGE); } } //实现新建文件 public void createFile() { if(mf.get_changed()) { int result = JOptionPane.showConfirmDialog(mf, "文件已经修改,是否保存当前文件?", "询问",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE); if(result==0) { //调用保存方法 saveFile(); mf.setFile();//新建文档 mf.getMainText().setText(""); mf.set_changed(false); } else if(result==1) { mf.setFile(); mf.getMainText().setText(""); mf.set_changed(false); } } else { mf.setFile(); mf.getMainText().setText(""); mf.set_changed(false); } } //实现打开文件 public void openFile() { if(mf.get_changed()) { int result = JOptionPane.showConfirmDialog(mf, "文件已经修改,是否保存当前文件?", "询问",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE); if(result==0) { //如果选择保存,则先保存当前文件,再把要打开的文件的文字读入到当前文本框中 saveFile(); mf.getMainText().setText(""); readTo(); } else if(result==1) { mf.getMainText().setText(""); readTo(); } } else { //如果当前文件没有修改,则直接打开目标文件 mf.getMainText().setText(""); readTo(); } } //实现保存文件 public void saveFile() { writeBack(mf.get_tempfile()); int length = mf.getMainText().getText().length(); mf.getMainText().setCaretPosition(length); } //实现文件另存为 public void saveasFile() { JFileChooser chooser = new JFileChooser("C:/Documents and Settings/Administrator/桌面/仿记事本程序所建文件夹"); chooser.setSelectedFile(new File("*.txt"));//设置默认选中文件名称 FileNameExtensionFilter filter = new FileNameExtensionFilter("txt & TXT文本文件", "txt", "TXT");//设置可选文件后缀名 chooser.setAcceptAllFileFilterUsed(false);//取消所有文件选项 chooser.setFileFilter(filter); while( chooser.showSaveDialog(mf)==0) { File file = chooser.getSelectedFile(); //获得后缀名,从.开始到结束(lastIndexOf(".")返回.在字符串中最后一次出现的坐标值,而subString(int beginIndex)) String str = file.getName().substring(file.getName().lastIndexOf(".")); if(str.equals(".txt")||str.equals(".TXT")) { if(file.exists()) { int result = JOptionPane.showConfirmDialog(mf, "文件已存在,是否覆盖文件?","询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(result==0) { //先删除该目录下的原文件,再新建一个同名的文件,最后写入内容 file.delete(); if(writeBack(file)) { mf.getMainText().setText("");//清空数据 break; //关闭窗口 } } } else { if(writeBack(file)) { mf.getMainText().setText("");//清空数据 break; } } } else { JOptionPane.showMessageDialog(mf, "您输入的文件名格式不对,为了您能正常打开文件,请重新输入!"); } } //保存之后修改标题 mf.setTitle("仿记事本"); //修改changed为false mf.set_changed(false); } //实现页面设置方法 public void pageSetup() { //暂且跟Windows下的记事本中此功能一样弹出对话框,需要进一步改进 JOptionPane.showConfirmDialog(null,"在您可以执行与打印机相关的任务(例如页面设置或打印一个" + "文档)之前,您必须已经安装打印机。您想现在安装打印机吗?", "询问", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); } //实现打印方法 public void print() { //查看有没有安装打印机 JOptionPane.showConfirmDialog(mf,"在您可以执行与打印机相关的任务(例如页面设置或打印一个" + "文档)之前,您必须已经安装打印机。您想现在安装打印机吗?", "询问", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); } //实现退出方法 public void exit() { if(mf.get_changed() == true) { int result = JOptionPane.showConfirmDialog(null, "文件已经修改,是否在退出之前保存文件?", "询问",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE); if(result == JOptionPane.OK_OPTION) { saveFile(); mf.dispose(); System.exit(0); } else if(result==JOptionPane.CANCEL_OPTION) { //不保存,则不往回写这个文件 mf.dispose(); System.exit(0); } } else { int result = JOptionPane.showConfirmDialog(mf, "您确定要退出吗?", "询问", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null); if(result==JOptionPane.OK_OPTION) { mf.dispose(); System.exit(0); } } } }
最近下载更多
xxxjjn LV1
6月16日
queueandstack LV3
2022年12月2日
沙发床上的 LV1
2022年5月30日
183077946781 LV1
2021年11月15日
尹恒yingying LV18
2021年10月12日
任天晴 LV1
2021年7月10日
ncy123456789 LV6
2021年7月6日
毫无qiushengyu LV2
2021年7月2日
祁康伟 LV1
2021年7月1日
周星星哥哥在外面 LV1
2021年6月15日