<推广> ProxMobo: Proxmox VE Monitor & Management for iOS - Featuring Advanced VNC/Terminal Access and Real-Time Temperature Monitoring.
昨晚尝试给Blog中的代码添加高亮,修改了style.css,虽然成功了但是发布文章出现了异常,经常打着打着上面的一段文字就missing了,非常蛋疼。而且正好在纠结Linux kernel中关于task_struct一些字段,索性后来把文章删了。
早上近九点爬起来上Java课,布置了第一个实验(小作业 sigh~),名为“基于触发器-动作框架的桌面分拣器”,听起来十分的拗口。不过对于触发器-动作这个框架倒是不陌生,前些日子很火的ifttt就是这个原理(要邀请码的留言即可),if this then that。今年最后的大作业也是写一个类似于ifttt的应用,故前些日子学习了下sina的api结果被大神们见笑了。
不再扯蛋,实验要完成的要求是:
“很多人喜欢把东西随便放在桌面上,导致桌面文件很乱。针对这一问题,我们要求编写一个分拣器,来对不同类型的文件进行归类。”
实验要求的触发动作是如果桌面有文件,就根据后缀名把它放入到指定的目录下。
我花了一点时间,实现了个简单的分拣器,把.txt文件放到txt文件夹下。
定义一个Task()接口,所有任务都得实现Task接口
- public interface Task {
- public boolean THIS();
- public void THAT();
- }
新建一个任务,就叫它FileClassify吧。override This()和That(),遍历desktop中的文件夹,若文件名中存在.txt,触发条件,新建txt文件夹将其存入。
我检索后缀只是用了String.contains(t),显然这个是不合理的。对文件进行移动时修改了文件的目录,如果更换所在盘,这个方法就失效了。
- public class FileClassify implements Task{
- private String[] fileNameList;
- private String rootDir;
- public FileClassify(){
- rootDir = new String("C:/Users/Rebornix/Desktop");
- nameListCreate();
- }
- public void nameListCreate(){
- File desktop = new File(rootDir);
- fileNameList = desktop.list();
- }
- @Override
- public void THAT() {
-
- File txtDir = new File(rootDir+"/txt");
- if(!txtDir.exists())
- txtDir.mkdir();
- File tempFile,fileNew;
- for(int i = 0; i < fileNameList.length; i++){
- if(fileNameList[i].contains(".txt")){
- tempFile = new File(rootDir+"/"+fileNameList[i]);
- fileNew = new File(rootDir+"/txt/"+fileNameList[i]);
- tempFile.renameTo(fileNew);
- }
- }
-
- }
- @Override
- public boolean THIS() {
-
- for(int i = 0; i < fileNameList.length; i++){
- if(fileNameList[i].contains(".txt"))
- return true;
- return false;
- }
- }
-
最后实现一个启动器
- public class Activator {
- public static void main(String[] args){
- Activator act = new Activator(new FileClassify());
- }
- public Activator(Object basicTask){
- if(((Task)basicTask).THIS()){
- ((Task)basicTask).THAT();
- }
- }
- }
实现结果:
功能成功的实现,方法很弱,体验很蹩脚,尤其是和正在用的Fences一比。Fences需要把文件手动调整到fence下,这里是自动调整到目录里。要是可以调用fences的api就好了。
去吃饭了,回去再优化代码添加功能吧~
仓促之下写的THAT()实在是弱爆了!今天听了IBM的CTO Linux Paul的讲座,关于Code Style的一段,自觉这个代码确实不精简,而且功能不靠谱,纯属人工手段。对于后缀的判断其实可以找出最后的一个“.”并将其后面的字符串取出,即为suffix。对每个文件查询其suffix,若已有此文件夹,置入,反之先新建此文件夹。如下:
- public String suffixDefine(String name){
- int dotPos = name.lastIndexOf('.');
- String suffix = new String();
-
- if(dotPos < name.length()&& dotPos > 0){
- suffix = name.substring(dotPos + 1);
- return suffix;
- }
- else
- return "";
- }
- @Override
- public void THAT() {
-
- System.out.println("Yes!");
- File tempFile;
- File fileNew;
- String suffix = new String("");
- for(int i = 0; i < fileNameList.length; i++){
-
- suffix = suffixDefine(fileNameList[i]);
- if(suffix != ""){
- File subDir = new File(rootDir + '/' + suffix);
- if(!subDir.exists())
- subDir.mkdir();
- tempFile = new File(rootDir+"/"+fileNameList[i]);
- fileNew = new File(rootDir+'/'+suffix+'/'+fileNameList[i]);
- tempFile.renameTo(fileNew);
- }
- }
- }