Java文件选择对话框JFileChooser使用详解

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

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,
                "目标文件创建失败,请检查目录是否为只读!");
          }
        }
        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,
                "目标文件创建失败,请检查目录是否为只读!");
          }
        }
        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);
    }
  }
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • java文件操作工具类分享(file文件工具类)

    复制代码 代码如下: import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.Fil

  • java使用randomaccessfile在文件任意位置写入数据

    复制代码 代码如下: import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile; public class InsertContent {    public static void insert(String fileName, long pos, String inse

  • Java文件操作类 File实现代码

    1.概述 对于文件系统的访问是每个语言必须的,java提供了File类来完成对文件或者目录的创建,重命名,删除,文件列表的操作以及判读是否存在. 2.对于文件/目录的操作 操作内容包括: 1:创建对象. 2:判断是否是目录/文件. 3:判断目录或者文件是否存在. 4:修改文件名称. 5:创建文件/创建一个目录/创建所有目录. 6:查询目录下所有目录和文件8输出文件路径 7:删除文件/目录 注:已上操作非必须全部一次使用 3.相关代码 public static void main(String[

  • Java组件FileUpload上传文件实现代码

    一般在用Servlet处理表单元素时,表单元素都是一些简单的文本,Servlet很容易用Request.getParameter()就可以处理.但是当表单不止包含一些简单的文本,比如有上传文件域时,Servlet直接从HttpServletRequest对象中解析出复合表单的每一个子部分仍然是一项非常复杂的工作. 为了简化对"multipart/form-data"类型数据的处理过程,可以采用相应的组件进行处理,这样可以节省很大的编码.支持重用,效率也挺高. 对于Java的组件也有一些

  • 详解Java中的File文件类以及FileDescriptor文件描述类

    File File 是"文件"和"目录路径名"的抽象表示形式. File 直接继承于Object,实现了Serializable接口和Comparable接口.实现Serializable接口,意味着File对象支持序列化操作.而实现Comparable接口,意味着File对象之间可以比较大小:File能直接被存储在有序集合(如TreeSet.TreeMap中). 1. 新建目录的常用方法 方法1:根据相对路径新建目录. 示例代码如下(在当前路径下新建目录"

  • java中File类的使用方法

    构造函数 复制代码 代码如下: public class FileDemo {     public static void main(String[] args){         //构造函数File(String pathname)         File f1 =new File("c:\\abc\\1.txt");         //File(String parent,String child)         File f2 =new File("c:\\a

  • Java 的 FileFilter文件过滤与readline读行操作实例代码

    复制代码 代码如下: package com.cjonline.foundation.evisa; import java.io.BufferedReader;import java.io.File;import java.io.FileFilter;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.math.BigDecimal; publ

  • 文件路径正确,报java.io.FileNotFoundException异常的原因及解决办法

    新添加个发文类型 insert into mis.zyb_sf_type values('121','榆财法字','榆财法字',2,'0','1',21,NULL,'0','发文模板.doc','') 创建文章时出错了, 异常信息: 文件保存失败 Java.io.FileNotFoundException: E:\tomcat\jinzhongshi\jinzs_yuci\webapps\myDoJZS\word\template_fw\发文模版.doc (系统找不到指定的文件.) at jav

  • Java文件选择对话框JFileChooser使用详解

    文件加密器,操作过程肯定涉及到文件选择器的使用,所以这里以文件加密器为例.下例为我自己写的一个文件加密器,没什么特别的加密算法,只为演示文件选择器JFileChooser的使用. 加密器界面如图: 项目目录结构如图: 下面贴出各个文件的源代码: MainForm.java package com.lidi; import javax.swing.*; import java.awt.*; public class MainForm extends JFrame { /** * 构造界面 * *

  • Java 文件上传的实例详解

    Java 文件上传的实例详解 java 文件上传 Java文件上传,介绍几种常用的方法,也是经过本人亲手调试过的 1.jspsmartupload 这个组件用起来是挺方便的,不过就是只适合小文件上传,如果大文件上传的话就不行,查看了一下他的代码,m_totalBytes = m_request.getContentLength(); m_binArray = new byte[m_totalBytes];居然把整个上传文件都读到内存去了,那如果是上传几十M的文件,同时几个用户上传,服务器稳挂,不

  • java 使用idea将工程打成jar并创建成exe文件类型执行的方法详解

    第一部分: 使用idea 打包工程jar 1.准备好一份 开发好的 可执行的 含有main方法的 工程. 例如:我随便写的main方法 public static void main(String[] args) throws IOException { Properties properties = System.getProperties(); String osName = properties.getProperty("os.name"); System.out.println

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

  • Java异或技操作给任意的文件加密原理及使用详解

    异或简单介绍:异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1. 简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1. 需求描述 在信息化时代对数据进行加密是一个很重要的主题,在做项目的过程中,我也实现了一个比较复杂的加密算法,但是由于涉及到的技术是保密的,所以在这里我实现一个比较简单的版本,利用文件的输入输出流和异或操作进行任意文件的加密,关于解密算法,很简单,自己思考下就能解决. 数学原理 该加密算法利用的是

  • java中压缩文件并下载的实例详解

    当我们对一些需要用到的资料进行整理时,会发现文件的内存占用很大,不过是下载或者存储,都不是很方便,这时候我们会想到把文件变成zip格式,即进行压缩.在正式开始压缩和下载文件之前,我们可以先对zip的格式进行一个了解,然后再就具体的方法给大家带来分享. 1.ZIP文件格式 [local file header + file data + data descriptor]{1,n} + central directory + end of central directory record 即 [文件

  • Java操作Excel文件解析与读写方法详解

    目录 一.概述 二.Apache POI 三.XSSF解析Excel文件 1.Workbook(Excel文件) 2.Sheet(工作簿) 3.Row(数据行) 4.Cell(单元格) 四.超大Excel文件读写 1.使用POI写入 2.使用EasyExcel 一.概述 在应用程序的开发过程中,经常需要使用 Excel 文件来进行数据的导入或导出.所以,在通过Java语言实现此 类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出). 在Java技术生态圈中,可以进行Excel文件

  • Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别?    总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上编译成class文件,而javascript则直接在浏览器上加载运行. 2.由第一点可看出,java代码需要编译,而javascript不需要编译. 3.从语言性质来说,java是一种高级编程语言,对变量检查要求严格,javascript只是一个简单的解释性的脚本语言,对变量检查及要求很弱.

  • java编程 中流对象选取规律详解

    实例如下: import java.io.*; public class TransStreamDemo2 { /** * 流操作的基本规律 * 1. * 源,键盘录入 * 目的.控制台 * 2. * 需求:想把键盘录入的数据存储到一个文件中. * 源:键盘 * 目的:文件(FileoutputStream可以操作文件) * 3. * 需求:想把一个文件的数据打印到控制台上 * 源:某个文件 * 目的:控制台 * * * 流操作的基本规律 * 最痛苦的是流对象很多不知道用哪个 * * 通过两个明

  • 对PyQt5的输入对话框使用(QInputDialog)详解

    PyQt5中QInputDialog的使用,Qt的QInputDialog类提供了一种简单方面的对话框来获得用户的单个输入信息,它提供了4种数据类型的输入: 1)字符串型(方法=QInputDialog.getText): 2)Int类型数据(方法=QInputDialog.getInt): 3)double类型数据(方法=QInputDialog.getDouble): 4)下拉列表框的条目(方法=QInputDialog.getItem). QInputDialog继承自QDialog,提供

随机推荐