Rebornix

     昨晚尝试给Blog中的代码添加高亮,修改了style.css,虽然成功了但是发布文章出现了异常,经常打着打着上面的一段文字就missing了,非常蛋疼。而且正好在纠结Linux kernel中关于task_struct一些字段,索性后来把文章删了。
     早上近九点爬起来上Java课,布置了第一个实验(小作业 sigh~),名为“基于触发器-动作框架的桌面分拣器”,听起来十分的拗口。不过对于触发器-动作这个框架倒是不陌生,前些日子很火的ifttt就是这个原理(要邀请码的留言即可),if this then that。今年最后的大作业也是写一个类似于ifttt的应用,故前些日子学习了下sina的api结果被大神们见笑了。
     不再扯蛋,实验要完成的要求是:
     “很多人喜欢把东西随便放在桌面上,导致桌面文件很乱。针对这一问题,我们要求编写一个分拣器,来对不同类型的文件进行归类。”
   实验要求的触发动作是如果桌面有文件,就根据后缀名把它放入到指定的目录下。
     我花了一点时间,实现了个简单的分拣器,把.txt文件放到txt文件夹下。
     定义一个Task()接口,所有任务都得实现Task接口
  1. public interface Task {   
  2.           public boolean THIS();   
  3.           public void THAT();   
  4.     }   
   新建一个任务,就叫它FileClassify吧。override This()和That(),遍历desktop中的文件夹,若文件名中存在.txt,触发条件,新建txt文件夹将其存入。
   我检索后缀只是用了String.contains(t),显然这个是不合理的。对文件进行移动时修改了文件的目录,如果更换所在盘,这个方法就失效了。
  1. public class FileClassify implements Task{   
  2.       private String[] fileNameList;   
  3.       private String rootDir;   
  4.       public FileClassify(){   
  5.             rootDir = new String("C:/Users/Rebornix/Desktop");   
  6.             nameListCreate();   
  7.       }   
  8.       public void nameListCreate(){   
  9.             File desktop = new File(rootDir);   
  10.             fileNameList = desktop.list();   
  11.       }   
  12.       @Override  
  13.       public void THAT() {   
  14.             // TODO Auto-generated method stub   
  15.             File txtDir = new File(rootDir+"/txt");   
  16.             if(!txtDir.exists())   
  17.                   txtDir.mkdir();   
  18.             File tempFile,fileNew;   
  19.             for(int i = 0; i < fileNameList.length; i++){   
  20.                   if(fileNameList[i].contains(".txt")){   
  21.                         tempFile = new File(rootDir+"/"+fileNameList[i]);   
  22.                         fileNew = new File(rootDir+"/txt/"+fileNameList[i]);   
  23.                         tempFile.renameTo(fileNew);   
  24.                   }   
  25.             }   
  26.                
  27.       }   
  28.       @Override  
  29.       public boolean THIS() {   
  30.             // TODO Auto-generated method stub   
  31.             for(int i = 0; i < fileNameList.length; i++){   
  32.                   if(fileNameList[i].contains(".txt"))   
  33.                         return true;   
  34.             return false;   
  35.       }   
  36. }   
  37.   
     最后实现一个启动器
  1. public class Activator {   
  2.       public static void main(String[] args){   
  3.             Activator act = new Activator(new FileClassify());   
  4.       }   
  5.       public Activator(Object basicTask){   
  6.             if(((Task)basicTask).THIS()){   
  7.                   ((Task)basicTask).THAT();   
  8.             }   
  9.       }   
  10. }  
      实现结果:
 
     功能成功的实现,方法很弱,体验很蹩脚,尤其是和正在用的Fences一比。Fences需要把文件手动调整到fence下,这里是自动调整到目录里。要是可以调用fences的api就好了。
     去吃饭了,回去再优化代码添加功能吧~

      仓促之下写的THAT()实在是弱爆了!今天听了IBM的CTO Linux Paul的讲座,关于Code Style的一段,自觉这个代码确实不精简,而且功能不靠谱,纯属人工手段。对于后缀的判断其实可以找出最后的一个“.”并将其后面的字符串取出,即为suffix。对每个文件查询其suffix,若已有此文件夹,置入,反之先新建此文件夹。如下:
  1. public String suffixDefine(String name){   
  2.         int dotPos = name.lastIndexOf('.');    
  3.         String suffix = new String();   
  4.            
  5.         if(dotPos < name.length()&& dotPos > 0){   
  6.             suffix = name.substring(dotPos + 1); // not dotPos !    
  7.             return suffix;   
  8.         }   
  9.         else  
  10.                       return "";   
  11.     }   
  12.     @Override  
  13.     public void THAT() {   
  14.         // TODO Auto-generated method stub   
  15.         System.out.println("Yes!");   
  16.         File tempFile;    
  17.         File fileNew;   
  18.         String suffix = new String("");   
  19.         for(int i = 0; i < fileNameList.length; i++){   
  20.             // define the suffix   
  21.             suffix = suffixDefine(fileNameList[i]);   
  22.             if(suffix != ""){   
  23.                 File subDir = new File(rootDir + '/' + suffix);   
  24.                 if(!subDir.exists())   
  25.                     subDir.mkdir();   
  26.                 tempFile = new File(rootDir+"/"+fileNameList[i]);   
  27.                 fileNew = new File(rootDir+'/'+suffix+'/'+fileNameList[i]);   
  28.                 tempFile.renameTo(fileNew);   
  29.             }   
  30.         }   
  31.     }  
Archive

blog comments powered by Disqus

Published

12 October 2011

Tags