简单的文件加密工具制作

主界面:

简单的文件加密工具制作


源代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class FileEncrypt extends JFrame {
	JTextField text = new JTextField();
	JButton btn = new JButton("选择文件");

	public static void main(String[] args) {
		FileEncrypt ui = new FileEncrypt();
		ui.Init();
	}

	public void Init() {
		//设置窗体属性
		this.setTitle("文件加密");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(410, 300);
		this.setLocation(400, 150);
		this.setLayout(null);
 
		//设置一个标签  一个输入框  三个按钮
		JLabel lab = new JLabel("文件名:");
		lab.setBounds(20, 40, 70, 30);
		this.add(lab);
		text.setBounds(70, 40, 200, 25);
		this.add(text);

		btn.setBounds(280, 40, 90, 25);
		btn.setActionCommand("select");
		this.add(btn);

		JButton btn1 = new JButton("加密文件");
		btn1.setBounds(40, 130, 90, 30);
		btn1.setActionCommand("add");
		this.add(btn1);
		JButton btn2 = new JButton("解密文件");
		btn2.setBounds(260, 130, 90, 30);
		btn2.setActionCommand("delete");
		this.add(btn2);

		//为3个按钮添加监听器
		Listen lis = new Listen();
		btn.addActionListener(lis);
		btn1.addActionListener(lis);
		btn2.addActionListener(lis);

		this.setVisible(true);
	}

	
	//定义内部类来实现ActionListener接口
	class Listen implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			//得到动作命令 和输入框信息
			String commend = e.getActionCommand();
			String filepath = text.getText();
			JOptionPane dlg = new JOptionPane();

			// 文件加密
			if ("add".equals(commend)) {
				
				// 判断文件是否存在
				if (filepath.isEmpty()) {
					dlg.showMessageDialog(null, "路径为空或不存在", "错误提示", 2);
				} else {
					try { 
						//定义输入流对象  
						FileInputStream fis = new FileInputStream(filepath);
						BufferedInputStream bis = new BufferedInputStream(fis);
						//定位起始位置
						bis.mark(10);
						//得到文件前10个字节  
						byte b[] = new byte[10];
						bis.read(b);
						String s1 = new String(b);
						//判断前10个字节是否为"[加密文件]"  
						if ("[加密文件]".equals(s1)) {
							dlg.showMessageDialog(null, "文件已为加密文件,无序加密",
									"加密失败", 2);
						} else {
							//回到起始位置重新读取数据
							bis.reset();
							ArrayList<Byte> list = new ArrayList<Byte>();
							int t = bis.read();
							// 当读取完毕 t=-1
							while (t != -1) {
								list.add((byte) t);
								t = bis.read();
							}
							bis.close();

							//写入数据
							FileOutputStream fos = new FileOutputStream(
									filepath);
							BufferedOutputStream bos = new BufferedOutputStream(
									fos);
							//在起始位置加上"[加密文件]"  用来判断是否为加密文件
							String s2 = "[加密文件]";
							bos.write(s2.getBytes());
							//一个字节一个字节的写入 并把每个字节都加上1 用来加密
							for (int i = 0; i < list.size(); i++) {
								bos.write(list.get(i) + 1);
							}

							// 刷新并关闭文件
							bos.flush();
							bos.close();
							
							dlg.showMessageDialog(null, "文件加密成功",
									"加密成功", 2);
						}

					} catch (Exception e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}

				}
			}
			// 文件解密
			else if ("delete".equals(commend)) {
				if (filepath.isEmpty()) {
					dlg.showMessageDialog(null, "路径为空或不存在", "错误提示", 2);
				} else {
					try {
						//判断前10个字节是否为"[加密文件]"
						FileInputStream fis = new FileInputStream(filepath);
						BufferedInputStream bis = new BufferedInputStream(fis);
						byte b[] = new byte[10];
						bis.read(b);
						String s1 = new String(b);
						if ("[加密文件]".equals(s1)) {

							ArrayList<Byte> list = new ArrayList<Byte>();
							int t = bis.read();
							//每个字节都减1
							while (t != -1) {
								list.add((byte) t);
								t = bis.read();
							}
							

							FileOutputStream fos = new FileOutputStream(
									filepath);
							BufferedOutputStream bos = new BufferedOutputStream(
									fos);

							for (int i = 0; i < list.size(); i++) {
								bos.write(list.get(i) - 1);
							}
							bos.flush();
							bos.close();
							dlg.showMessageDialog(null, "文件解密成功",
									"解密成功", 2);
						}
						else{
							dlg.showMessageDialog(null, "文件不为加密文件,无序解密",
									"解密失败", 2);
						}
						bis.close();
					} catch (Exception e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
			// 打开对话框
			else if ("select".equals(commend)) {
				JFileChooser chooser = new JFileChooser();
				int t = chooser.showOpenDialog(null);
				if (t == JFileChooser.APPROVE_OPTION) {
					String path = chooser.getSelectedFile().getAbsolutePath();
					text.setText(path);
				}
			}
		}
	}
}

你可能感兴趣的:(文件)