Java GUI编程之图片分摊小工具的实现(初级)

来源:互联网 发布:python的set函数 编辑:程序博客网 时间:2024/05/22 13:25

    这篇文章里面主要分三部分:

        第一、该工具的简单介绍;

        第二、该工具中涉及到的技术;

        第三、源码介绍;

        首先,做这个工具是基于我们公司人资部门的一个需求,在之前的下班的路上和公司人资的同事一起交流工作的时候无意间得知现在她们部门需要周末加班分摊图片,就是将公司一千多张图片按照既定的规则进行分组。比如将张三、李四分到一个文件夹下面,王五、赵六分到另外一个文件夹下面就这样的一个小功能。由于当时正好赶上公司做用户头像功能的开发工作,所以在当时就跟我的同事说这个东西完全可以用一段小程序来实现,编写这样的一个小工具也就是一两个小时的事儿何必要动员部门员工加班去做这些的事儿呢,所以当时就利用午休的时间做了这样一个小工具,但是由于是周五快下班的时候让人资过来进行分摊,在分摊过程中出现了一点点的问题,所以导致了分摊失败。之所以失败是由于当时考虑的功能的时候没有做深入的思考,这也让本人也感觉非常的丢人和没有面子。当时晚上要赶火车出差,所以第二天也没有给他们继续完善这个工作。时至今日他们分摊工作一定结束了,虽然他们可能用不上了,但是这个东西还是需要做一些总结和反思。

        对于此简单的工具技术上没什么难点对于知道Java是什么的人就能够用其实现,这个工具就是将一堆杂乱无章的图片按照规则移动到相应的文件夹下面,实现这个简单的功能主要的核心就是第一、文件的移动;第二、excel或者其他规则定义文件的读取(这里主要是采用excel来定义规则)。

   ①通过FileInputStream和FileInputStream流即可实现②excel文件读取是采用的jxl包来实现。下面将代码贴出以供参考。

/**     * @author qingfeilee     * @time 2011-11-5 19:37     * @param oldPath, newPath     * @description This method accept two params oldPath, newPath     *             which represent the original file path and the new file path     * @return log     * **/    public String moveImage(String oldPath,String newPath){       String log = "日志信息";       FileInputStream fin = null;       FileOutputStream fout = null;       try{           File oldFile = new File(oldPath);           File newFile = new File(newPath+"/"+oldFile.getName());           if(oldFile.exists()){              if(!newFile.exists()){                  newFile.createNewFile();              }              fin = new FileInputStream(oldFile);              fout = new FileOutputStream(newPath+"/"+oldFile.getName());              byte[] b =new byte[512];              int n = fin.read(b);              while(n != -1){                  fout.write(b);                  n = fin.read(b);              }              log = oldFile.getName()+"成功移动!";           }       } catch (Exception e) {           try {              fin.close();              fout.close();           } catch (IOException ee) {              log = "文件流关闭失败!";              ee.printStackTrace();           }           log = "文件移动失败!";           e.printStackTrace();       }       return log;    }

       所以要想实现图片的移动只需要在点击一个按钮的时候来调用这个方法即可,调用这个方法需要传递待分摊文件的路径以及将要分摊到目录。而这些信息是通过excel来定义的,所以下面就将读取excel文件的方法粘出来供交流。

  

  /**     * @author qingfeilee     * @time 2011-11-5 20:40     * @param path     * @description This method accept only one param path     *             which represent the excel path     * @return imageBeans     * **/    public ArrayList<ImageBean>getExcelData(String path){       ArrayList<ImageBean> imageBeans = new ArrayList<ImageBean>();       try {           //打开excel文件           Workbook book = Workbook.getWorkbook(new File(path)) ;           //取得第一个sheet           Sheet sheet = book.getSheet(0);           //取得行数           int rows = sheet.getRows();           for(int i = 1; i < rows; i++) {              ImageBean imageBean = new ImageBean();              imageBean.setFileId(sheet.getCell(0, i).getContents());              imageBean.setUserName(sheet.getCell(1,i).getContents());              imageBeans.add(imageBean);           }           //关闭文件           book.close();       } catch (BiffException e) {           e.printStackTrace();       } catch (IOException e) {           e.printStackTrace();       }       return imageBeans;    }}

       通过这方法将excel文件信息读出来,并将其保存到一个list里面,如果后期需要扩展excel的规则只需要修改这个方法和bean类即可。

通过这两个核心的方法即可实现了上面提到的图片分摊工具,但是如果仅仅是这样的代码人资的人肯定还是手足无措,所以还需要加上图形化操作工具来供他们使用。下面简单的将操作图形工具粘出来和各位同行交流。该小工具效果图如图一:

                                                

图一

        在大学期间曾经做过几个JavaSwing程序,但是当时对这些东西都是一致半解所以出现了大量的代码冗余,虽然现在对设计有了一点点的了解但是很多东西还是需要不断的学习和理解的。这个很小的登录界面其实用一个Frame并在这其上添加button、textfield、label即可实现,但是最近一段时间对于超过三百行的类就不想看的情绪还是让我把这个简单的界面分拆成了几个类来实现。将程序拆分不仅仅可以降低代码的冗余率提高代码的重用,同时也是程序容易扩展降低各个模块间的耦合度。工具结构层次如图二:

                                                                            

图二

                  

        对于图形界面的开发主要是通过ui包来实现这些工作ui包主要是将面板绘制、皮肤绘制、界面常量。其中的功能包主要是考虑以后大数据加载的时候处理大数据,目前还没有对大数据(大于一万的数据量没有测试,所以姑且将大于一万叫做大数据吧)进行实现需要在以后慢慢完善。

图片的移动和excel的读取全部在util包里进行实现,

 最后通过启动tooler类来启动整个小工具

public class Tooler {    /**     * @author qingfeilee     * @date 2011-11-20     * @description launch the tooler     */    public void launch(){       ToolerFrame tooler = new ToolerFrame();       tooler.init();    }       public static void main(String args[]){       Tooler tooler = new Tooler();       tooler.launch();    }}


       通过这个小工具让我再次意识到了项目中整体思考的重要性。

       最后、谢谢我的同事在工作上对于我这个职场新人的指导;谢谢项目组在我进入公司到现在给予我的帮助,在项目这近一年的时间里成长了很大,在以后的工作中会不弃不舍更加努力学习快速成长。

 

 

 

 


原创粉丝点击