Java文件選擇對話框JFileChooser使用詳解
更新時間:2015年07月02日 11:08:27 投稿:hebedich
這篇文章主要介紹了Java文件選擇對話框JFileChooser使用詳解的相關(guān)資料,需要的朋友可以參考下
文件加密器,操作過程肯定涉及到文件選擇器的使用,所以這里以文件加密器為例。下例為我自己寫的一個文件加密器,沒什么特別的加密算法,只為演示文件選擇器JFileChooser的使用。
加密器界面如圖:


項目目錄結(jié)構(gòu)如圖:

下面貼出各個文件的源代碼:
MainForm.java
package com.lidi;
import javax.swing.*;
import java.awt.*;
public class MainForm extends JFrame {
/**
* 構(gòu)造界面
*
* @author 1109030125
*/
private static final long serialVersionUID = 1L;
/* 主窗體里面的若干元素 */
private JFrame mainForm = new JFrame("TXT文件加密"); // 主窗體,標(biāo)題為“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();
/* 設(shè)置主窗體屬性 */
mainForm.setSize(400, 270);// 設(shè)置主窗體大小
mainForm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 設(shè)置主窗體關(guān)閉按鈕樣式
mainForm.setLocationRelativeTo(null);// 設(shè)置居于屏幕中央
mainForm.setResizable(false);// 設(shè)置窗口不可縮放
mainForm.setLayout(null);
mainForm.setVisible(true);// 顯示窗口
/* 設(shè)置各元素位置布局 */
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);
/* 為各元素綁定事件監(jiān)聽器 */
buttonBrowseSource.addActionListener(new BrowseAction()); // 為源文件瀏覽按鈕綁定監(jiān)聽器,點擊該按鈕調(diào)用文件選擇窗口
buttonBrowseTarget.addActionListener(new BrowseAction()); // 為目標(biāo)位置瀏覽按鈕綁定監(jiān)聽器,點擊該按鈕調(diào)用文件選擇窗口
buttonEncrypt.addActionListener(new EncryptAction()); // 為加密按鈕綁定監(jiān)聽器,單擊加密按鈕會對源文件進行加密并輸出到目標(biāo)位置
buttonDecrypt.addActionListener(new DecryptAction()); // 為解密按鈕綁定監(jiān)聽器,單擊解密按鈕會對源文件進行解密并輸出到目標(biāo)位置
sourcefile.getDocument().addDocumentListener(new TextFieldAction());// 為源文件文本域綁定事件,如果文件是.txt類型,則禁用解密按鈕;如果是.kcd文件,則禁用加密按鈕。
sourcefile.setEditable(false);// 設(shè)置源文件文本域不可手動修改
targetfile.setEditable(false);// 設(shè)置目標(biāo)位置文本域不可手動修改
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
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
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,
"目標(biāo)文件創(chuàng)建失敗,請檢查目錄是否為只讀!");
}
}
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
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,
"目標(biāo)文件創(chuàng)建失敗,請檢查目錄是否為只讀!");
}
}
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
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);
}
}
}
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
JavaWeb Spring注解Annotation深入學(xué)習(xí)
這篇文章主要為大家詳細(xì)介紹了JavaWeb Spring注解Annotation,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
mybatis-plus實現(xiàn)自定義SQL、多表查詢與多表分頁查詢語句實例
mybatisplus是個很好用的插件,相信小伙伴們都知道,下面這篇文章主要給大家介紹了關(guān)于mybatis-plus實現(xiàn)自定義SQL、多表查詢與多表分頁查詢語句的相關(guān)資料,需要的朋友可以參考下2022-09-09
Java由淺入深細(xì)數(shù)數(shù)組的操作下
數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。Java?語言中提供的數(shù)組是用來存儲固定大小的同類型元素2022-04-04

