简单的文件加密工具制作

主界面:

[img]http://dl2.iteye.com/upload/attachment/0103/7508/e5720630-8e68-3250-b1c1-56575f887cad.jpg[/img]


源代码:

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);
}
}
}
}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值