很久没有Coding了,一直在忙些乱七八糟的事情。由于项目需求的变化,之前的一些基于JavaWeb的项目现在需要转换为桌面软件,而关于Java Swing 编程方面,我之前也是一片空白,只好现学现用了。 昨天通过半天的学习,实现了文件提交,包括界面和功能。由于是非网络环境下运行,所以不需要http协议之类,文件的上传仅是文件的读写操作。借助Myeclipse10中的 swing/matisse,能够较为迅速地实现此功能。
1、搭建界面。选择swing controls中相应的控件,搭建如下图所示的界面(下面两个黄色的框是用于显示状态报告的两个无text属性值的jLabel)
2、选择文件窗口及文件类型过滤
基本原理:点击选择按钮后,弹出一个showOpenDialog窗口,在这里面选择文件,确定后把所选文件的路径添加到jTextField中。
具体代码示例:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { JFileChooser fd = new JFileChooser(); //创建一个jFileChooser对象,用于打开一个文件选择窗口 FileNameExtensionFilter filter = new FileNameExtensionFilter("owl file", "owl"); //根据需要,创建一个文件类型过滤器 fd.addChoosableFileFilter(filter); //将文件类型过滤器添加到窗口中 fd.setCurrentDirectory(new File("e:/")); // 设置默认打开位置 int operator = fd.showOpenDialog(null); //显示窗口 if (operator == 1) // 如果用户在文件选择窗口中点击了取消按钮 ; // 什么也不做,窗口会自动关闭,这一步必须要用 否则程序会报错 else jTextField1.setText(fd.getSelectedFile().getAbsolutePath().toString()); // 如果用户选择了文件后点击了确定(或打开)按钮,则将所选文件的物理路径得到到jTextField中 }
3、文件的提交
如上所述,本文讲的文件的上传,本质是在本地将文件进行复制,代码如下:
private void jButton3MouseClicked(java.awt.event.MouseEvent evt) { if (jTextField1.getText().isEmpty()) jLabel1.setText("请选择本体文件."); else if (jTextField2.getText().isEmpty()) jLabel2.setText("请选择文档文件."); else { jLabel1.setText("正在提交,请稍候..."); //复制本体文件 File f = new File(jTextField1.getText()); FileInputStream fis; FileOutputStream fos; byte[] buffer = new byte[1024]; int len = 0; try { fos = new FileOutputStream("d:/" + f.getName()); fis = new FileInputStream(f); while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.flush(); fos.close(); } catch (Exception e) { //e.printStackTrace(); jLabel1.setText("本体文件上传失败。"); } jLabel1.setText("<html>本体文件上传成功.</html>"); }
4、关闭窗口,退出程序
用户如果想退出程序,则既可点击窗口右上的关闭图标,也可点击界面中的取消按钮。
private void jButton4MouseClicked(java.awt.event.MouseEvent evt) { // 点击取消按钮退出系统 this.dispose(); }