Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例

文件加密器,操作过程肯定涉及到文件选择器的使用,所以这里以文件加密器为例。下例为我自己写的一个文件加密器,没什么特别的加密算法,只为演示文件选择器JFileChooser的使用。

加密器界面如图:

Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例

Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例

项目目录结构如图:

Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例

下面贴出各个文件的源代码:

MainForm.java

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

Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例
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

Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例
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

Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例
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

Java文件选择对话框(文件选择器JFileChooser)的使用:以一个文件加密器为例
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);

        }

    }



}
查看代码

 

你可能感兴趣的:(JFileChooser)