Category Archives: Java

Easy DAO Framework is NOW Online

        Easy DAO Framework is a lightweight DAO(Data Access Object) framework what coded in pure JAVA for idea of easy is good, simple is nice. It is lightweight and easy to use. It takes the role of implementing a DAO … Continue reading

Posted in Java | Leave a comment

项目结束了,牢骚+总结

本来只有3个礼拜的项目,一直拖会拖会,一直到今天,近1个半月终于差不多要结束了.这一个半月中频繁的加班打压着所有的人,特别是我.看着将近 30张的taxi发票,回想这1个半月的日子,除了元旦休息了一天,还有用了2天调休,都没有休息过.每天有事或没事都在公司里做着这样或那样的"工作".特别是最后一个半星期,等待日方的测试,等待日方的回应及等待release的时间超过了70%的工作时间.虽然有一半的java src及大部分js+jsp是由我来写的,或者或多或少的的难点都是我来的,也不至于最后我们这一块只有我一个人留着坚守阵地.(ps.后面每天留守的就日本的dm,pm及分管command的leader和我.ps又ps.不给leader的工资,却做着leader的事情,这点很不爽!)还有那加班工资生为级别最低的我,每小时才少的可怜的钱,只有用加班时间去换调休,但是当我需要调休时却不允许,(ps.只有我调休不被允许,这什么社会!)眼看上个月的加班用不完,只能换取那点微不足道的加班工资,实在是郁闷的极点.真有点强买强卖的味道.这次争取在2月份好好的把加班全部换成调休,宅他个一个月.说完这点再说些对于项目的看法,项目的环境应该是solaris+appserver,从项目开始就开始研究如何搭建这个环境,直到上个礼拜中旬才把环境真正的搭建起来.原来的src都是在solaris+tomcat下写的,一下子换了新环境又出了许多新的问题,特别是到了这个时候又要弃用dbcp而使用 appserver自带的db connection pool,还好当时设计的时候抽象的不错,要不又是一个极大的工程.既然说到了solaris,在unix内核的os下做过程序的都应该有这样的感受:在 unix内核下写程序什么最麻烦?对了,就是权限问题!对于文件,文件夹,用户的权限问题一直痛苦的陪伴了我起码1个礼拜,为了弄这些权限,真的是叫没有什么比这个还要麻烦了.特别是在ut及it中测试中总会有着这样那要的权限问题而使程序报出error.还有就是ssh及其它rsa加密命令的使用 (sftp,scp等),也是一段时间的"骨头".(ps.如公钥密钥的创建等)然后是对于日本项目的一些牢骚,项目中的很多做法都需要一层又一层的确认才能实施,即使是很好的方法或点子,都会因为日本人的否定而被打死.还有对于技术,使用的都是些若干年前的技术,不使用新兴及适合的技术来处理一些比较典型的情况,比如对ajax的使用,就被无情的否决了.还有就是团队中加入了过多的新人,对于程序及算法完全没有理解的新人过多,使我浪费了很多时间在他们身上.不过这样让我能从一个比较高的高度来看整个项目,基本上整个项目的每个环节我都有所了解,并且对于其它人的src基本上我都是比较清楚的.这点在后期的对应中体现出就是我们这块的绝大多数对应都是我来做的,并且知道那些是我们的那些是command的,也是最后一段时间我留下来加班的罪魁祸首.可谓优劣参半.不过整个项目做下来也有佩服日本人的方面,就是对于日本人的严谨,很多我们ut,it中没有测试到的地方,他们都会测试到,而且对于一些log 文件中的log内容都是很严谨的检查,以至于一些我们在coding中使用ctrl c+ctrl v贴的log的errorcode忘记修改而出现的log内容错误也能查出.最后贴一些实用且容易遗忘的东西在后面:1.在unix内核的os下判断文件夹下是否有文件或子文件夹:ls -al 文件夹 | wc -l判断返回的数字0: 该文件夹不存在2: 该文件夹没有权限3: 该文件夹下没有文件或子文件夹>3: 该文件夹下有文件或子文件夹2.删除文件夹时:rm -rf 文件夹 能删除没有权限的文件夹(这个很汗,unix以安全著称,不过这个却能无视权限删除没有权限的文件夹,可见其破坏性之高)3.ssh及其它rsa命令ssh等本来需要输入密码才能使用,不过我们使用的是java调用外面shell来使用这些命令而不可能去每次执行每次去输入密码,这时就需要生成密钥放在客户端上.(ps.姑且这么说,也就是连接主机的机器)方法如下:第一步:得到DSA Key% ssh-keygen -t dsa第二步:提示是否将这个key按照默认的方式保存($HOME/.ssh/id_dsa),接受默认设置即可,并提示输入口令,可以选择不输入口令,这使得不需要启用ssh-agent。但是这将降低系统的安装性。在并行计算集群的内网环境中可以不需要口令。第三步:将 $HOME/.ssh/id_dsa.pub文件拷贝到 $HOME/.ssh/authorized_keys% cd $HOME/.ssh% cp id_dsa.pub authorized_keys为了使得DSA认证可以工作,用户在每个计算结点的的home directory下都需要有.ssh这个目录。如果home dirctory不是共享的,则需要将 $HOME/.ssh拷贝到每个计算结点的home directory下。在 $HOME/.ssh目录下文件的权限如下所示:-rw-r–r– authorized_keys-rw——- … Continue reading

Posted in Java | Leave a comment

DVDMgr v0.81

原来想做个皮肤压缩的,不过现在也不太高兴,等什么时候有空再做了。有人提出了不爽之处:搜索框没有焦点。现在就把它给修正了,起码在用起来又能方便点了。皮肤压缩等下个版本吧。 下载地址光盘管理工具 v0.81界面:修正搜索界面无焦点问题,现在搜索界面的焦点在输入框中

Posted in Java | Leave a comment

更新DVDMrg0.8

寝室断网和毕业论文的关系,导致很久没有更新了,先把更新后的DVDMrg传上来,明天还要出去。等有空再来写点什么。 下载地址 更新说明: 光盘管理工具 v0.72-v0.8核心:修改了config的组成并添加了图形化的config配置界面,新的搜索界面。原来需要在config下修改的SEARCH_ALL_NODE和IGNORE_CASE现在作为搜索界面的可选项出现。config从原来的:DECIVE_TO_STORESAVE_FILE_PATHSEARCH_ALL_NODEIGNORE_CASE四项变化为:DECIVE_TO_STORE=文件夹TYPE_OF_STORE=XML/BYTE其中XML表示使用XML文件存取内容 BYTE表示使用字节流文件存取内容并在第一次使用本系统时有图形化界面可以设置。

Posted in Java | Leave a comment

Jigloo

今天在blogjava上发现一个好东西Jigloo,这个eclipse插件可以实现jbuilder的组件拖放功能,虽然生成的代码不怎么样,不过适合制作界面,减少编码量,支持awt,swing/swt。下载地址

Posted in Java | Leave a comment

DVD管理工具 v0.71

v0.7学习了picasa的启动方式,拥有更加良好的界面及正反向搜索。 下载地址 希望大家继续反馈bug及用户体验。 更新说明: v0.71:核心:修改搜索算法,提高了搜索效率以png,gif,jpg的顺序读入图像文件,可以使用png,gif,jpg作为资源文件的格式,只要确定images文件夹下的文件名即可:Search=工具栏Search图标SearchNext=工具栏SearchNext图标SearchPre=工具栏SearchPre图标Splash=读取画面 v0.7:核心:添加搜索上一个和下一个功能 v0.61:界面:添加读取界面 v0.6:核心:加入忽略大小写搜索,方法如下:修改Config下的config文件中的IGNORE_CASE=0不忽略大小写(默认),1忽略大小写

Posted in Java | Leave a comment

DVD管理工具 v0.5

由于多线程的问题v0.4会出现读取xml之后序号乱序的问题,现在问题已经解决。希望大家踊跃反馈使用体验及bug DVD管理工具 v0.5更新: 下载地址 v0.5核心:修正1个bug加入正则表达式来排序读取的文件,使读取后排序显示

Posted in Java | Leave a comment

DVD管理工具源码下载

DVD管理工具v0.4: 源码下载 欢迎提出宝贵意见及bug反馈。 附更新说明: 光盘管理工具 ver0.1:允许用户编辑Conifg下的config文件来设置光驱路径及存档文件路径DECIVE_TO_STORE=光驱路径(默认E:)SAVE_FILE_PATH=存档文件路径(默认安装目录下data文件夹)可添加,删除,覆盖DVD存档可用多个关键字搜索存档,关键字用空格分割 ver0.2:修改多个bug核心:增加可重命名第二层节点的方法覆盖时会报错用config中的SEARCH_ALL_NODE可控制是否搜索非叶节点SEARCH_ALL_NODE=0仅搜索叶节点(默认),1搜索所有节点 界面:搜索完成后,定位搜索内容修改删除,重命名成右键单击弹出菜单,界面更加人性化 v0.3核心:修正搜索时2个bug 界面:添加菜单栏和工具栏,更加符合使用习惯 v0.4核心:改进外部文件读取算法,读取外部文件速度更快

Posted in Java | Leave a comment

JAVA的两个FTP包的比较

1、sun.net.ftp.*;这是一个不被官方支持的,但是放在JDK下面的FTP包。正因为不被支持,所以没有官方提供API,这是其最大的缺陷之一。最重要由于不是官方支持的,所以文档也是没有的http://swig.stanford.edu/pub/java/javadoc/overview-summary.html这里有该包的API。 先给一个简单的例子:(例子来源互联网)1)显示FTP服务器上的文件 void ftpList_actionPerformed(ActionEvent e) {String server=serverEdit.getText();//输入的FTP服务器的IP地址String user=userEdit.getText(); file://登/录FTP服务器的用户名String password=passwordEdit.getText();//登录FTP服务器的用户名的口令String path=pathEdit.getText();//FTP服务器上的路径try {FtpClient ftpClient=new FtpClient();//创建FtpClient对象ftpClient.openServer(server);//连接FTP服务器ftpClient.login(user, password);//登录FTP服务器if (path.length()!=0) ftpClient.cd(path);TelnetInputStream is=ftpClient.list();int c;while ((c=is.read())!=-1) {System.out.print((char) c);}is.close();ftpClient.closeServer();//退出FTP服务器} catch (IOException ex) {;}} 2)从FTP服务器上下传一个文件 void getButton_actionPerformed(ActionEvent e) {String server=serverEdit.getText();String user=userEdit.getText();String password=passwordEdit.getText();String path=pathEdit.getText();String filename=filenameEdit.getText();try {FtpClient ftpClient=new FtpClient();ftpClient.openServer(server);ftpClient.login(user, password);if … Continue reading

Posted in Java | Leave a comment

javamail接收邮件

import java.io.*; import java.text.*; import java.util.*; import javax.mail.*; import javax.mail.internet.*;  public class PraseMimeMessage{     private MimeMessage mimeMessage = null;     private String saveAttachPath = "";          //附件下载后的存放目录     private StringBuffer bodytext = new StringBuffer(); //存放邮件内容的StringBuffer对象     private String dateformat = "yy-MM-dd HH:mm";       //默认的日前显示格式          /**      * 构造函数,初始化一个MimeMessage对象      */     public PraseMimeMessage(){}     public PraseMimeMessage(MimeMessage mimeMessage){         this.mimeMessage = mimeMessage;         System.out.println("create a PraseMimeMessage object……..");     }      public void setMimeMessage(MimeMessage mimeMessage){         this.mimeMessage = mimeMessage;     }          /**      * 获得发件人的地址和姓名      */     public String getFrom()throws Exception{         InternetAddress address[] = (InternetAddress[])mimeMessage.getFrom();         String from = address[0].getAddress();         if(from == null) from="";         String personal = address[0].getPersonal();         if(personal == null) personal="";         String fromaddr = personal+"<"+from+">";         return fromaddr;     }      /**      * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同      * "to"—-收件人 "cc"—抄送人地址 "bcc"—密送人地址      */     public String getMailAddress(String type)throws Exception{         String mailaddr = "";         String addtype = type.toUpperCase();         InternetAddress []address = null;         if(addtype.equals("TO") || addtype.equals("CC") ||addtype.equals("BCC")){             if(addtype.equals("TO")){                 address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.TO);             }else if(addtype.equals("CC")){                 address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.CC);             }else{                 address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.BCC);             }             if(address != null){                 for(int i=0;i<address.length;i++){                     String email=address[i].getAddress();                     if(email==null) email="";                     else{                         email=MimeUtility.decodeText(email);                     }                     String personal=address[i].getPersonal();                     if(personal==null) personal="";                     else{                         personal=MimeUtility.decodeText(personal);                     }                     String compositeto=personal+"<"+email+">";                     mailaddr+=","+compositeto;                 }                 mailaddr=mailaddr.substring(1);             }         }else{             throw new Exception("Error emailaddr type!");         }         return mailaddr;     }          /**      * 获得邮件主题      */     public String getSubject()throws MessagingException{         String subject = "";         try{             subject = MimeUtility.decodeText(mimeMessage.getSubject());             if(subject == null) subject="";         }catch(Exception exce){         }         return subject;     }          /**      * 获得邮件发送日期      */     public String getSentDate()throws Exception{         Date sentdate = mimeMessage.getSentDate();         SimpleDateFormat format = new SimpleDateFormat(dateformat);         return format.format(sentdate);     }          /**      * 获得邮件正文内容      */     public String getBodyText(){         return bodytext.toString();     }          /**      * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件      * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析      */     public void getMailContent(Part part)throws Exception{         String contenttype = part.getContentType();         int nameindex = contenttype.indexOf("name");         boolean conname =false;         if(nameindex != -1) conname=true;          System.out.println("CONTENTTYPE: "+contenttype);         if(part.isMimeType("text/plain") && !conname){             bodytext.append((String)part.getContent());         }else if(part.isMimeType("text/html") && !conname){             bodytext.append((String)part.getContent());         }else if(part.isMimeType("multipart/*")){             Multipart multipart = (Multipart)part.getContent();             int counts = multipart.getCount();             for(int i=0;i<counts;i++){                 getMailContent(multipart.getBodyPart(i));             }         }else if(part.isMimeType("message/rfc822")){             getMailContent((Part)part.getContent());         }else{}     }      /**      * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"      */     public boolean getReplySign()throws MessagingException{         boolean replysign = false;         String needreply[] = mimeMessage.getHeader("Disposition-Notification-To");         if(needreply != null){             replysign = true;         }         return replysign;     }          /**      * 获得此邮件的Message-ID      */     public String getMessageId()throws MessagingException{         return mimeMessage.getMessageID();     }          /**      * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】      */     public boolean isNew()throws MessagingException{         boolean isnew = false;         Flags flags = ((Message)mimeMessage).getFlags();         Flags.Flag []flag = flags.getSystemFlags();         System.out.println("flags’s length: "+flag.length);         for(int i=0;i<flag.length;i++){             if(flag[i] == Flags.Flag.SEEN){                 isnew=true;                 System.out.println("seen Message…….");                 break;             }         }         return isnew;     }          /**      * 判断此邮件是否包含附件      */     public boolean isContainAttach(Part part)throws Exception{         boolean attachflag = false;         String contentType = part.getContentType();         if(part.isMimeType("multipart/*")){             Multipart mp = (Multipart)part.getContent();             for(int i=0;i<mp.getCount();i++){                 BodyPart mpart = mp.getBodyPart(i);                 String disposition = mpart.getDisposition();                 if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE))))                     attachflag = true;                 else if(mpart.isMimeType("multipart/*")){                     attachflag = isContainAttach((Part)mpart);                 }else{                     String contype = mpart.getContentType();                     if(contype.toLowerCase().indexOf("application") != -1) attachflag=true;                     if(contype.toLowerCase().indexOf("name") != -1) attachflag=true;                 }             }         }else if(part.isMimeType("message/rfc822")){             attachflag = isContainAttach((Part)part.getContent());         }         return attachflag;     }          /**      * 【保存附件】      */     public void saveAttachMent(Part part)throws Exception{         String fileName = "";         if(part.isMimeType("multipart/*")){             Multipart mp = (Multipart)part.getContent();             for(int i=0;i<mp.getCount();i++){                 BodyPart mpart = mp.getBodyPart(i);                 String disposition = mpart.getDisposition();                 if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE)))){                     fileName = mpart.getFileName();                     if(fileName.toLowerCase().indexOf("gb2312") != -1){                         fileName = MimeUtility.decodeText(fileName);                     }                                         saveFile(fileName,mpart.getInputStream());                 }else if(mpart.isMimeType("multipart/*")){                     saveAttachMent(mpart);                 }else{                     fileName = mpart.getFileName();                     if((fileName != null) && (fileName.toLowerCase().indexOf("GB2312") != -1)){                         fileName=MimeUtility.decodeText(fileName);                         saveFile(fileName,mpart.getInputStream());                     }                 }             }         }else if(part.isMimeType("message/rfc822")){             saveAttachMent((Part)part.getContent());         }     }          /**      * 【设置附件存放路径】      */     public void setAttachPath(String attachpath){         this.saveAttachPath = attachpath;     }          /**      * 【设置日期显示格式】      */     public void setDateFormat(String format)throws Exception{         this.dateformat = format;     }          /**      * 【获得附件存放路径】      */     public String getAttachPath(){         return saveAttachPath;     }          /**      * 【真正的保存附件到指定目录里】      */     private void saveFile(String fileName,InputStream in)throws Exception{         String osName = System.getProperty("os.name");         String storedir = getAttachPath();         String separator = "";         if(osName == null) osName="";         if(osName.toLowerCase().indexOf("win") != -1){             separator = "\\";             if(storedir == null || storedir.equals("")) storedir="c:\\tmp";         }else{             separator = "/";             storedir = "/tmp";         }         File storefile = new File(storedir+separator+fileName);         System.out.println("storefile’s path: "+storefile.toString());         //for(int i=0;storefile.exists();i++){             //storefile = new File(storedir+separator+fileName+i);         //}         BufferedOutputStream bos = null;         BufferedInputStream  bis = null;         try{             bos = new BufferedOutputStream(new FileOutputStream(storefile));             bis = new BufferedInputStream(in);             int c;             while((c=bis.read()) != -1){                 bos.write(c);                 bos.flush();             }         }catch(Exception exception){             exception.printStackTrace();             throw new Exception("文件保存失败!");         }finally{             bos.close();             bis.close();         }     }          /**      * PraseMimeMessage类测试      */     public static void main(String args[])throws Exception{         String host = "主机名/ip";     //【pop.mail.yahoo.com.cn】         String username ="用户名";     //【wwp_1124】         String password ="密码";       //【……..】          Properties props = new Properties();         Session session = Session.getDefaultInstance(props, null);         Store store = session.getStore("pop3");         store.connect(host, username, password);          Folder folder = store.getFolder("INBOX");         folder.open(Folder.READ_ONLY);         Message message[] = folder.getMessages();         System.out.println("Messages’s length: "+message.length);         PraseMimeMessage pmm = null;         for(int i=0;i<message.length;i++){             pmm = new PraseMimeMessage((MimeMessage)message[i]);             System.out.println("Message "+i+" subject: "+pmm.getSubject());             System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());             System.out.println("Message "+i+" replysign: "+pmm.getReplySign());             System.out.println("Message "+i+" hasRead: "+pmm.isNew());             System.out.println("Message "+i+" containAttachment: "+pmm.isContainAttach((Part)message[i]));             System.out.println("Message "+i+" form: "+pmm.getFrom());             System.out.println("Message "+i+" to: "+pmm.getMailAddress("to"));             System.out.println("Message "+i+" cc: "+pmm.getMailAddress("cc"));             System.out.println("Message "+i+" bcc: "+pmm.getMailAddress("bcc"));             pmm.setDateFormat("yy年MM月dd日 HH:mm");             System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());             System.out.println("Message "+i+" Message-ID: "+pmm.getMessageId());             pmm.getMailContent((Part)message[i]);             System.out.println("Message "+i+" bodycontent: \r\n"+pmm.getBodyText());             pmm.setAttachPath("c:\\tmp\\coffeecat1124");             pmm.saveAttachMent((Part)message[i]);         }     } } 

Posted in Java | 2 Comments