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); } } } }

15751306056 LV1
5月19日
xxxjjn LV1
2024年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日