首页>代码>java swing实现的学生教师选课管理系统代码>/NotePadTest/src/FileOperation/FileOperation.java
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日
最近浏览更多
krispeng  LV13 9月15日
xxxjjn  LV1 6月16日
mikrokosmos_2024  LV1 6月15日
梁小贤  LV1 4月27日
ruo12138  LV1 4月11日
潘潘123456  LV2 3月2日
lsglsg9  LV23 2023年12月29日
lshlsh 2023年12月25日
暂无贡献等级
sunshine9920  LV12 2023年10月20日
卢本伟不开挂  LV4 2023年9月3日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友