一· 源码的github链接:https://github.com/lvcaixia/test/tree/master

二· 代码运行功能:对文件进行加密解密

三· 核心算法详细设计 

对于每个类的主要方法,给出其详细设计的核心算法,如:

1、图形用户界面模块

  在图形用户界面,设置两个面板,并分别设置显示其组件的布局。设置两个菜单项,分别为“打开”和“保存”;设置两个按钮,分别为“加密”和“解密”;创建一个文本区,用一个标签注明“文件浏览窗口”,这就是整个图形用户界面。

   此外,还添加了一个窗口事件windowClosing,可以关闭运行的程序。

    窗口事件的代码实现:

  

addWindowListener(new WindowAdapter()
       {
                       public void windowClosing(WindowEvent e)
                       {
                            System.exit(0);
                        }
                   });       
            }

2、加密操作模块

       本程序采用简单的加密算法,即把从文本区获得的文本文件,初始化,存放到一个数组中,然后进行异或运算,把结果重新存放于该数组中,从而显现在“文件浏览窗口”中。

代码实现

if(e.getSource()==button1)
{
                     char a[]=texta.getText().toCharArray();/*把texta中获得的文本,进行初始化,与原字符串长度相等,并将该字符串对象的全部字符复制到该数组a[]中*/
               texta.setText(null);
                     int n;
                     char secret=' ';
                     for(int i=0;i<a.length;i++)
                     {
                char c=(char)(secret^a[i] ;//进行异或运算)
                            texta.append(""+c);
                     }

3、解密操作模块

      解密操作其实同加密操作相同,依旧首先打开加密后的文件,使其显示在文本区中,再同样对数组里的元素进行初始化,进行异或运算,即可得到解密后的文件,再显示到“文件浏览窗口”中。

   入口参数:指定文件路径

代码实现

if(e.getSource()==button2)
              {
                     char a[]=texta.getText().toCharArray();
                     texta.setText(null);
                     int n;
                     char secret=' ';
                     for(int i=0;i<a.length;i++)
                     {
                            char c=(char)(secret^a[i]);//再次异或运算,即还原
                            texta.append(""+c);
                     }

    4、文件保存模块

本程序最大的特点就是:可以选择是否保存加密后的文本文件。因为加密后的文件先显示在文本区中,之后选择菜单项“保存”,即可弹出“保存对话框”,进行查找写入文件,写入字符流,从而实现保存。

代码实现:

if(e.getSource()==itemSave)//查找写入的文件
              {
                     filedialog_save.setVisible(true);
                     if(filedialog_save.getFile()!=null)
                     {
                            try
                            {
                                   File
file=new File(filedialog_save.getDirectory(),filedialog_save.getFile());
                                   FileWriter tofile=new FileWriter(file);//写入字符流
                                   BufferedWriter out=new BufferedWriter(tofile);
                                   out.write(texta.getText(),0,(texta.getText()).length());
                                   out.close();
                                   tofile.close();
                            }
                            catch (IOException e2)
                            {
                            }

     5、文件选择模块

  同上个文件保存模块类似,依旧在选择菜单项“打开”后,查找读入文件,读取字符流,弹出“打开对话框”,从而可实现获取文件。

  出口值:被选文件的路径

代码实现

public void actionPerformed(ActionEvent e)//查找读入文件
       {
              if(e.getSource()==itemOpen)
              {
                     filedialog_load.setVisible(true);
                     texta.setText(null);
                     String s;
                     if(filedialog_load.getFile()!=null)
                     {try
                            {
                     File file=new File(filedialog_load.getDirectory(),filedialog_load.getFile());
                      FileReader file_reader=new FileReader(file);//读取字符流
                            BufferedReader in=new BufferedReader(file_reader);
                                   while((s=in.readLine())!=null)
                                          texta.append(s+'\n');
                                   in.close();
                                   file_reader.close();
                            }
                            catch (IOException e1)
                            }     }

四· 代码运行结果:

  

加密解密java 加密解密设计实验体会_字符流

 

 

加密解密java 加密解密设计实验体会_异或运算_02

 

 

加密解密java 加密解密设计实验体会_代码实现_03

 

 

加密解密java 加密解密设计实验体会_字符流_04

 

 

加密解密java 加密解密设计实验体会_字符流_05

 

 

加密解密java 加密解密设计实验体会_异或运算_06

 五· 心得体会

       通过实践加深学生对程序设计的理论、方法和基础知识的理解,掌握进行面向对象设计的基本方法,提高运用知识分析实际问题、解决实际问题的能力,提高学生的应用能力