文件加密器,操作过程肯定涉及到文件选择器的使用,所以这里以文件加密器为例。下例为我自己写的一个文件加密器,没什么特别的加密算法,只为演示文件选择器JFileChooser的使用。
加密器界面如图:
项目目录结构如图:
下面贴出各个文件的源代码:
MainForm.java
package com.lidi; import javax.swing.*; import java.awt.*; public class MainForm extends JFrame { /** * 构造界面 * * @author 1109030125 */ private static final long serialVersionUID = 1L; /* 主窗体里面的若干元素 */ private JFrame mainForm = new JFrame(\"TXT文件加密\"); // 主窗体,标题为“TXT文件加密” private JLabel label1 = new JLabel(\"请选择待加密或解密的文件:\"); private JLabel label2 = new JLabel(\"请选择加密或解密后的文件存放位置:\"); public static JTextField sourcefile = new JTextField(); // 选择待加密或解密文件路径的文本域 public static JTextField targetfile = new JTextField(); // 选择加密或解密后文件路径的文本域 public static JButton buttonBrowseSource = new JButton(\"浏览\"); // 浏览按钮 public static JButton buttonBrowseTarget = new JButton(\"浏览\"); // 浏览按钮 public static JButton buttonEncrypt = new JButton(\"加密\"); // 加密按钮 public static JButton buttonDecrypt = new JButton(\"解密\"); // 解密按钮 public MainForm() { Container container = mainForm.getContentPane(); /* 设置主窗体属性 */ mainForm.setSize(400, 270);// 设置主窗体大小 mainForm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 设置主窗体关闭按钮样式 mainForm.setLocationRelativeTo(null);// 设置居于屏幕中央 mainForm.setResizable(false);// 设置窗口不可缩放 mainForm.setLayout(null); mainForm.setVisible(true);// 显示窗口 /* 设置各元素位置布局 */ label1.setBounds(30, 10, 300, 30); sourcefile.setBounds(50, 50, 200, 30); buttonBrowseSource.setBounds(270, 50, 60, 30); label2.setBounds(30, 90, 300, 30); targetfile.setBounds(50, 130, 200, 30); buttonBrowseTarget.setBounds(270, 130, 60, 30); buttonEncrypt.setBounds(100, 180, 60, 30); buttonDecrypt.setBounds(200, 180, 60, 30); /* 为各元素绑定事件监听器 */ buttonBrowseSource.addActionListener(new BrowseAction()); // 为源文件浏览按钮绑定监听器,点击该按钮调用文件选择窗口 buttonBrowseTarget.addActionListener(new BrowseAction()); // 为目标位置浏览按钮绑定监听器,点击该按钮调用文件选择窗口 buttonEncrypt.addActionListener(new EncryptAction()); // 为加密按钮绑定监听器,单击加密按钮会对源文件进行加密并输出到目标位置 buttonDecrypt.addActionListener(new DecryptAction()); // 为解密按钮绑定监听器,单击解密按钮会对源文件进行解密并输出到目标位置 sourcefile.getDocument().addDocumentListener(new TextFieldAction());// 为源文件文本域绑定事件,如果文件是.txt类型,则禁用解密按钮;如果是.kcd文件,则禁用加密按钮。 sourcefile.setEditable(false);// 设置源文件文本域不可手动修改 targetfile.setEditable(false);// 设置目标位置文本域不可手动修改 container.add(label1); container.add(label2); container.add(sourcefile); container.add(targetfile); container.add(buttonBrowseSource); container.add(buttonBrowseTarget); container.add(buttonEncrypt); container.add(buttonDecrypt); } public static void main(String args[]) { new MainForm(); } }
BrowseAction.java
package com.lidi; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; public class BrowseAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(MainForm.buttonBrowseSource)) { JFileChooser fcDlg = new JFileChooser(); fcDlg.setDialogTitle(\"请选择待加密或解密的文件...\"); FileNameExtensionFilter filter = new FileNameExtensionFilter( \"文本文件(*.txt;*.kcd)\", \"txt\", \"kcd\"); fcDlg.setFileFilter(filter); int returnVal = fcDlg.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { String filepath = fcDlg.getSelectedFile().getPath(); MainForm.sourcefile.setText(filepath); } } else if (e.getSource().equals(MainForm.buttonBrowseTarget)) { JFileChooser fcDlg = new JFileChooser(); fcDlg.setDialogTitle(\"请选择加密或解密后的文件存放目录\"); fcDlg.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnVal = fcDlg.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { String filepath = fcDlg.getSelectedFile().getPath(); MainForm.targetfile.setText(filepath); } } } }
EncryptAction.java
package com.lidi; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JOptionPane; public class EncryptAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (MainForm.sourcefile.getText().isEmpty()) { JOptionPane.showMessageDialog(null, \"请选择待加密文件!\"); } else if (MainForm.targetfile.getText().isEmpty()) { JOptionPane.showMessageDialog(null, \"请选择加密后文件存放目录!\"); } else { String sourcepath = MainForm.sourcefile.getText(); String targetpath = MainForm.targetfile.getText(); File file = new File(sourcepath); String filename = file.getName(); File dir = new File(targetpath); if (file.exists() && dir.isDirectory()) { File result = new File(getFinalFile(targetpath, filename)); if (!result.exists()) { try { result.createNewFile(); } catch (IOException e1) { JOptionPane.showMessageDialog(null, \"目标文件创建失败,请检查目录是否为只读!\"); } } try { FileReader fr = new FileReader(file); FileWriter fw = new FileWriter(result); int ch = 0; while ((ch = fr.read()) != -1) { // System.out.print(Encrypt(ch)); fw.write(Encrypt(ch)); } fw.close(); fr.close(); JOptionPane.showMessageDialog(null, \"加密成功!\"); } catch (Exception e1) { JOptionPane.showMessageDialog(null, \"未知错误!\"); } } else if (!file.exists()) { JOptionPane.showMessageDialog(null, \"待加密文件不存在!\"); } else { JOptionPane.showMessageDialog(null, \"加密后文件存放目录不存在!\"); } } } public char Encrypt(int ch) { int x = ch + 1; return (char) (x); } public String getFinalFile(String targetpath, String filename) { int length = filename.length(); String finalFileName = filename.substring(0, length - 4); String finalFile = targetpath + \"\\\\\" + finalFileName + \".kcd\"; return finalFile; } }
DecryptAction.java
package com.lidi; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JOptionPane; public class DecryptAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (MainForm.sourcefile.getText().isEmpty()) { JOptionPane.showMessageDialog(null, \"请选择待解密文件!\"); } else if (MainForm.targetfile.getText().isEmpty()) { JOptionPane.showMessageDialog(null, \"请选择解密后文件存放目录!\"); } else { String sourcepath = MainForm.sourcefile.getText(); String targetpath = MainForm.targetfile.getText(); File file = new File(sourcepath); String filename = file.getName(); File dir = new File(targetpath); if (file.exists() && dir.isDirectory()) { File result = new File(getFinalFile(targetpath, filename)); if (!result.exists()) { try { result.createNewFile(); } catch (IOException e1) { JOptionPane.showMessageDialog(null, \"目标文件创建失败,请检查目录是否为只读!\"); } } try { FileReader fr = new FileReader(file); FileWriter fw = new FileWriter(result); int ch = 0; while ((ch = fr.read()) != -1) { // System.out.print(Encrypt(ch)); fw.write(Decrypt(ch)); } fw.close(); fr.close(); JOptionPane.showMessageDialog(null, \"解密成功!\"); } catch (Exception e1) { JOptionPane.showMessageDialog(null, \"未知错误!\"); } } else if (!file.exists()) { JOptionPane.showMessageDialog(null, \"待解密文件不存在!\"); } else { JOptionPane.showMessageDialog(null, \"解密后文件存放目录不存在!\"); } } } public char Decrypt(int ch) { // double x = 0 - Math.pow(ch, 2); int x = ch - 1; return (char) (x); } public String getFinalFile(String targetpath, String filename) { int length = filename.length(); String finalFileName = filename.substring(0, length - 4); String finalFile = targetpath + \"\\\\\" + finalFileName + \".txt\"; return finalFile; } }
TextFieldAction.java
package com.lidi; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; public class TextFieldAction implements DocumentListener { @Override public void insertUpdate(DocumentEvent e) { // TODO Auto-generated method stub ButtonAjust(); } @Override public void removeUpdate(DocumentEvent e) { // TODO Auto-generated method stub ButtonAjust(); } @Override public void changedUpdate(DocumentEvent e) { // TODO Auto-generated method stub ButtonAjust(); } public void ButtonAjust() { String file = MainForm.sourcefile.getText(); if (file.endsWith(\"txt\")) { MainForm.buttonDecrypt.setEnabled(false); MainForm.buttonEncrypt.setEnabled(true); } if (file.endsWith(\"kcd\")) { MainForm.buttonEncrypt.setEnabled(false); MainForm.buttonDecrypt.setEnabled(true); } } }
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/1782
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我