欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

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

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);
    }
  }
}

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