Java文件選擇對話框JFileChooser使用詳解
文件加密器,操作過程肯定涉及到文件選擇器的使用,所以這里以文件加密器為例。下例為我自己寫的一個文件加密器,沒什么特別的加密算法,只為演示文件選擇器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)聽器,單擊加密按鈕會對源文件進(jìn)行加密并輸出到目標(biāo)位置 buttonDecrypt.addActionListener(new DecryptAction()); // 為解密按鈕綁定監(jiān)聽器,單擊解密按鈕會對源文件進(jì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)文章
Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場景
這篇文章主要介紹了Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場景,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06使用Jenkins來構(gòu)建GIT+Maven項目的方法步驟
這篇文章主要介紹了使用Jenkins來構(gòu)建GIT+Maven項目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01詳解Spring-Boot集成Spring session并存入redis
這篇文章主要介紹了詳解Spring-Boot集成Spring session并存入redis,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05SpringBoot+微信小程序?qū)崿F(xiàn)文件上傳與下載功能詳解
這篇文章主要為大家介紹了SpringBoot整合微信小程序?qū)崿F(xiàn)文件上傳與下載功能,文中的實現(xiàn)步驟講解詳細(xì),快跟隨小編一起學(xué)習(xí)一下吧2022-03-03volatile與happens-before的關(guān)系與內(nèi)存一致性錯誤
本文講了Java并發(fā)編程中volatile變量、happens-before與內(nèi)存一致性錯誤,下面來和小編一起學(xué)習(xí)下如何解決2019-05-05