功能要求:通过软件界面选择打开一个文本文件,使用移位密码对文件内容进行加密并保存,或者针对移位密码加密的文本文件进行解密操作并保存。界面要示:图形界面实现。
1.图形界面设计
标签:用于显示系统名称。 文本区域:用于写入文本。 按钮:用于标注功能。
修改变量名称,也可以不修改。
2.代码设计
“选择文件”按钮下代码:
// 创建一个新的字符串对象
JFileChooser fileChooser = new JFileChooser();
// 显示文件选择器对话框,并等待用户选择文件
int result = fileChooser.showOpenDialog(this);
// 如果用户选择了一个文件并点击了“打开”按钮
if (result == JFileChooser.APPROVE_OPTION) {
// 获取用户选择的文件
File file = fileChooser.getSelectedFile();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
// 读取文件的每一行并进行排序
while ((line = reader.readLine()) != null) {
textArea.append(line);
}
// 关闭缓冲读取器对象
reader.close();
} catch (IOException ex) {
// 如果读取文件时发生错误,显示一个错误消息对话框
JOptionPane.showMessageDialog(this, "Error reading file: " + ex.getMessage());
}
}
“加密”按钮下代码:
// 获取文本区域中的纯文本
String plaintext = textArea.getText();
// 初始化密文为空字符串
String ciphertext = "";
// 设置移位量为3
int shift = 3; // Set shift amount to 3
// 遍历每个字符
for (int i = 0; i < plaintext.length(); i++) {
char c = plaintext.charAt(i);
// 如果是一个字母
if (Character.isLetter(c)) {
// 如果是大写字母
if (Character.isUpperCase(c)) {
// 对字母进行移位,并将结果添加到密文中
ciphertext += (char) ('A' + (c - 'A' + shift) % 26);
} else {
// 如果是小写字母,同样进行移位并将结果添加到密文中
ciphertext += (char) ('a' + (c - 'a' + shift) % 26);
}
} else {
// 如果不是一个字母,则直接将字符添加到密文中
ciphertext += c;
}
// 将加密后的密文设置回文本区域
textArea.setText(ciphertext);
}
“解密”按钮下代码:
// 获取文本区域中的密文
String plaintext = textArea.getText();
// 初始化密文为空字符串
String ciphertext = "";
// 设置移位量为3
int shift = 3; // Set shift amount to 3
// 遍历每个字符
for (int i = 0; i < plaintext.length(); i++) {
char c = plaintext.charAt(i);
// 如果是一个字母
if (Character.isLetter(c)) {
// 如果是大写字母
if (Character.isUpperCase(c)) {
// 对字母进行还原,并将结果添加到密文中
ciphertext += (char) ('A' + (c - 'A' - shift + 26) % 26);
} else {
// 如果是小写字母,同样进行还原并将结果添加到密文中
ciphertext += (char) ('a' + (c - 'a' - shift + 26) % 26);
}
} else {
// 如果不是一个字母,则直接将字符添加到密文中
ciphertext += c;
}
// 将解密后的密文设置回文本区域
textArea.setText(ciphertext);
}
“保存”按钮下的代码:
// 创建一个文件选择器对话框
JFileChooser fileChooser = new JFileChooser();
// 显示文件保存对话框,并等待用户进行选择
int result = fileChooser.showSaveDialog(this);
// 如果用户选择了保存选项
if (result == JFileChooser.APPROVE_OPTION) {
// 获取用户选择的文件
File file = fileChooser.getSelectedFile();
try {
// 创建一个缓冲写入器对象
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
// 将文本区域中的文本写入文件
writer.write(textArea.getText());
// 关闭写入器对象
writer.close();
} catch (IOException ex) {
// 如果写入文件时发生错误,显示一个错误消息对话框
JOptionPane.showMessageDialog(this, "Error writing file: " + ex.getMessage());
}
}
3.总代码
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;
public class 文件加密 extends javax.swing.JFrame implements ActionListener{
private JTextArea log;
private JFileChooser fileChooser;
private File selectedFile = null;
public 文件加密() {
initComponents();
}
@SuppressWarnings("unchecked")
private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {
// 创建一个新的字符串对象
JFileChooser fileChooser = new JFileChooser();
// 显示文件选择器对话框,并等待用户选择文件
int result = fileChooser.showOpenDialog(this);
// 如果用户选择了一个文件并点击了“打开”按钮
if (result == JFileChooser.APPROVE_OPTION) {
// 获取用户选择的文件
File file = fileChooser.getSelectedFile();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
// 读取文件的每一行并进行排序
while ((line = reader.readLine()) != null) {
textArea.append(line);
}
// 关闭缓冲读取器对象
reader.close();
} catch (IOException ex) {
// 如果读取文件时发生错误,显示一个错误消息对话框
JOptionPane.showMessageDialog(this, "Error reading file: " + ex.getMessage());
}
}
}
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {
// 创建一个文件选择器对话框
JFileChooser fileChooser = new JFileChooser();
// 显示文件保存对话框,并等待用户进行选择
int result = fileChooser.showSaveDialog(this);
// 如果用户选择了保存选项
if (result == JFileChooser.APPROVE_OPTION) {
// 获取用户选择的文件
File file = fileChooser.getSelectedFile();
try {
// 创建一个缓冲写入器对象
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
// 将文本区域中的文本写入文件
writer.write(textArea.getText());
// 关闭写入器对象
writer.close();
} catch (IOException ex) {
// 如果写入文件时发生错误,显示一个错误消息对话框
JOptionPane.showMessageDialog(this, "Error writing file: " + ex.getMessage());
}
}
}
private void encryptButtonActionPerformed(java.awt.event.ActionEvent evt) {
// 获取文本区域中的纯文本
String plaintext = textArea.getText();
// 初始化密文为空字符串
String ciphertext = "";
// 设置移位量为3
int shift = 3; // Set shift amount to 3
// 遍历每个字符
for (int i = 0; i < plaintext.length(); i++) {
char c = plaintext.charAt(i);
// 如果是一个字母
if (Character.isLetter(c)) {
// 如果是大写字母
if (Character.isUpperCase(c)) {
// 对字母进行移位,并将结果添加到密文中
ciphertext += (char) ('A' + (c - 'A' + shift) % 26);
} else {
// 如果是小写字母,同样进行移位并将结果添加到密文中
ciphertext += (char) ('a' + (c - 'a' + shift) % 26);
}
} else {
// 如果不是一个字母,则直接将字符添加到密文中
ciphertext += c;
}
// 将加密后的密文设置回文本区域
textArea.setText(ciphertext);
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// 获取文本区域中的密文
String plaintext = textArea.getText();
// 初始化密文为空字符串
String ciphertext = "";
// 设置移位量为3
int shift = 3; // Set shift amount to 3
// 遍历每个字符
for (int i = 0; i < plaintext.length(); i++) {
char c = plaintext.charAt(i);
// 如果是一个字母
if (Character.isLetter(c)) {
// 如果是大写字母
if (Character.isUpperCase(c)) {
// 对字母进行还原,并将结果添加到密文中
ciphertext += (char) ('A' + (c - 'A' - shift + 26) % 26);
} else {
// 如果是小写字母,同样进行还原并将结果添加到密文中
ciphertext += (char) ('a' + (c - 'a' - shift + 26) % 26);
}
} else {
// 如果不是一个字母,则直接将字符添加到密文中
ciphertext += c;
}
// 将解密后的密文设置回文本区域
textArea.setText(ciphertext);
} // TODO add your handling code here:
}
public static void main(String args[]) {
// 在事件队列上运行一个新的Runnable对象
EventQueue.invokeLater(new Runnable() {
public void run() {
// 创建文件加密窗口并将其设置为可见
new 文件加密().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton encryptButton;
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JButton openButton;
private javax.swing.JButton saveButton;
private javax.swing.JLabel table;
private javax.swing.JTextArea textArea;
// End of variables declaration
@Override
public void actionPerformed(ActionEvent e) {
// 判断事件源是哪个按钮
if (e.getSource() == openButton) {
// 如果是打开按钮,则执行打开按钮的事件处理方法
openButtonActionPerformed(e);
} else if (e.getSource() == saveButton) {
// 如果是保存按钮,则执行保存按钮的事件处理方法
saveButtonActionPerformed(e);
} else if (e.getSource() == encryptButton) {
// 如果是加密按钮,则执行加密按钮的事件处理方法
encryptButtonActionPerformed(e);
}
}
}
不可直接将总代码粘贴到NetBeans中,有些代码NetBeans会自动生成,直接粘贴代码会重复。