javaswing界面实现文件脱敏和还原,实现上传也可以拖拽上传包含文字字母数字字符的任意类型文件,获取文件内容,存放到String类型的数组, 界面中可以选择脱敏规则,规则1,对汉字进行脱敏,规则2,对字母进行脱敏,规则3,对数字进行脱敏,可以一次选择多个规则,点击加敏按钮后,将结果返还到界面中,可以对结果进行下载。上传文件点击还原按钮,可以对加敏的文件进行还原。
时间: 2023-10-02 20:06:51 浏览: 61
这是一个有趣的问题,那我来帮你分步骤实现。
首先,我们需要创建一个 Java Swing 界面,然后添加上传文件和拖拽上传文件的功能。你可以使用 JFileChooser 和 DropTarget 类来实现这个功能。JFileChooser 可以让用户选择需要上传的文件,而 DropTarget 则能够监听文件拖拽事件。
下一步,我们需要将上传的文件内容存储到一个 String 类型的数组中。你可以使用 Java NIO 库中的 Files.readAllBytes() 方法来读取文件内容并存储到一个 byte 数组中,然后将 byte 数组转换成 String 类型。
接下来,我们需要实现文件脱敏和还原的功能。你可以使用正则表达式来实现对汉字、字母和数字的脱敏。然后将处理后的结果返回到界面上。
最后,我们需要实现下载加敏后的文件的功能。你可以使用 Java IO 库中的 FileOutputStream 类来创建一个文件输出流,然后将处理后的结果写入到文件中。
以下是代码示例:
```java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileNameExtensionFilter;
public class FileObfuscator extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JFileChooser fileChooser;
private JCheckBox chnCheckBox;
private JCheckBox alphaCheckBox;
private JCheckBox digitCheckBox;
private JTextArea originalTextArea;
private JTextArea obfuscatedTextArea;
public FileObfuscator() {
super("File Obfuscator");
// Create file chooser
fileChooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files", "txt");
fileChooser.setFileFilter(filter);
// Create check boxes
chnCheckBox = new JCheckBox("Chinese Characters");
alphaCheckBox = new JCheckBox("Alphabets");
digitCheckBox = new JCheckBox("Digits");
// Create text areas
originalTextArea = new JTextArea(10, 30);
originalTextArea.setLineWrap(true);
originalTextArea.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JScrollPane originalScrollPane = new JScrollPane(originalTextArea);
obfuscatedTextArea = new JTextArea(10, 30);
obfuscatedTextArea.setLineWrap(true);
obfuscatedTextArea.setEditable(false);
obfuscatedTextArea.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JScrollPane obfuscatedScrollPane = new JScrollPane(obfuscatedTextArea);
// Create buttons
JButton uploadButton = new JButton("Upload");
uploadButton.addActionListener(this);
JButton obfuscateButton = new JButton("Obfuscate");
obfuscateButton.addActionListener(this);
JButton downloadButton = new JButton("Download");
downloadButton.addActionListener(this);
// Create panels
JPanel filePanel = new JPanel();
filePanel.add(uploadButton);
JPanel checkBoxPanel = new JPanel();
checkBoxPanel.add(chnCheckBox);
checkBoxPanel.add(alphaCheckBox);
checkBoxPanel.add(digitCheckBox);
JPanel originalPanel = new JPanel(new BorderLayout());
originalPanel.add(new JLabel("Original Text:"), BorderLayout.NORTH);
originalPanel.add(originalScrollPane, BorderLayout.CENTER);
originalPanel.add(filePanel, BorderLayout.SOUTH);
JPanel obfuscatedPanel = new JPanel(new BorderLayout());
obfuscatedPanel.add(new JLabel("Obfuscated Text:"), BorderLayout.NORTH);
obfuscatedPanel.add(obfuscatedScrollPane, BorderLayout.CENTER);
obfuscatedPanel.add(downloadButton, BorderLayout.SOUTH);
JPanel buttonPanel = new JPanel();
buttonPanel.add(obfuscateButton);
JPanel panel = new JPanel(new BorderLayout());
panel.add(checkBoxPanel, BorderLayout.NORTH);
panel.add(originalPanel, BorderLayout.WEST);
panel.add(obfuscatedPanel, BorderLayout.EAST);
panel.add(buttonPanel, BorderLayout.SOUTH);
add(panel);
// Set frame properties
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(600, 400));
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new FileObfuscator();
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Upload")) {
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
byte[] bytes = Files.readAllBytes(file.toPath());
String text = new String(bytes);
originalTextArea.setText(text);
} catch (IOException ex) {
ex.printStackTrace();
}
}
} else if (e.getActionCommand().equals("Obfuscate")) {
String text = originalTextArea.getText();
if (text != null && !text.isEmpty()) {
String obfuscatedText = obfuscate(text);
obfuscatedTextArea.setText(obfuscatedText);
}
} else if (e.getActionCommand().equals("Download")) {
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
String obfuscatedText = obfuscatedTextArea.getText();
try {
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write(obfuscatedText.getBytes());
outputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
private String obfuscate(String text) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (chnCheckBox.isSelected() && isChinese(c)) {
builder.append("*");
} else if (alphaCheckBox.isSelected() && isAlphabet(c)) {
builder.append("*");
} else if (digitCheckBox.isSelected() && isDigit(c)) {
builder.append("*");
} else {
builder.append(c);
}
}
return builder.toString();
}
private boolean isChinese(char c) {
Character.UnicodeBlock block = Character.UnicodeBlock.of(c);
return block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|| block == Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS
|| block == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| block == Character.UnicodeBlock.CJK_RADICALS_SUPPLEMENT
|| block == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| block == Character.UnicodeBlock.ENCLOSED_CJK_LETTERS_AND_MONTHS;
}
private boolean isAlphabet(char c) {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
private boolean isDigit(char c) {
return c >= '0' && c <= '9';
}
}
```
注意,这只是一个简单的实现,你需要根据你的需求进行修改和扩展。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)