文件加密器,操作过程肯定涉及到文件选择器的使用,所以这里以文件加密器为例。下例为我自己写的一个文件加密器,没什么特别的加密算法,只为演示文件选择器JFileChooser的使用。
加密器界面如图:
项目目录结构如图:
下面贴出各个文件的源代码:
MainForm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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 );
}
}
}
|
以上所述就是本文的全部内容了,希望大家能够喜欢。