文件管理器

                                       2017年2月26日                 星期六      

        这两天学习了对文件的增删改存,平时我们在电脑上一个简单的动作——复制粘贴,没想到要通过那么多的代码去实现。而且要考虑的东西非常多,比如说:文件的拷贝里面,首先要考虑源路径是否存在、是否为空,如果存在并且不为空就进行下面的步骤,否则的话提示用户源路径不存在。接下来还要考虑是文件还是文件夹,如果是文件夹就进行递归,是文件就调用复制函数。在递归的时候要判断目标文件是否存在,如果不存在还要创建文件文件夹----destfile.mkdirs();由于递归的时候目标文件的路径在增长,所以要获得该文件下的子文件的名字,再将该字符串转换为File类型,递归时的源路径和目标路径都需要改变。

                                File[] files = srcfile.listFiles();
for (File f : files) {
String string = f.getName();// 得到该文件夹下的子文件的名字
File file = new File(destfile, string);
copyfolder(f, file, srckey, destkey);
},

       在这个小项目中很多地方用到了函数重载,无论给的是路径还是文件,有一部分代码是相同的,所以可以用重载的方法,在一个函数里面调用另一个函数,只要把参数转换成所需要的类型即可。用到最多的有:

1、把字符串转换为File类型  File f=new File(srcpath);

2、把File类型转换为String类型   String s=File.getpath(srcfile);

3、把字符串转换为byte类型,  byte[] b=ss.getBytes();删除文件的话其实是拷贝中的一部分,也是判断是文件还是文件夹,如果是文件就直接删除,file.delete();是文件夹的话就进行递归,不过值得注意的的是这样删除的是该文件的子文件,所以最后要把文件夹删掉。

      接下来就是关键字的替换,要明白这个步骤是在文件拷贝的时候进行的,所以当读完第一次后就要判断srckey中是否为空,如果为空,说明不要进行替换,否则就就进行替换。在替换的时候用到了一个函数Replace(srckey,destkey),一定要把替换后的字符串保存下来,然后再将它写出去。记得写完一次后还要进行读写的操作,length = fis.read(b);之前忘了了写这句,因此复制出来的文件不断的在增大。

      文件保存功能只要用到输出流,因为要保存的文件已经在内存中了,只要将它写出到指定的路径下即可。这个函数需要传两个参数,一个是保存的路径,另一个是保存的内容。都是从文本域中通过getText()这个函数来获取。

      选择按钮它不是普通的按钮,单击一下它就会弹出一个对话框出来,用于选择路径,这个主意用到了JFilechooser这个类,几个重要的函数是

1、setApproveButtonText("hh"),用来设置ApproveButton中的文本。

2、setFileSelectionMode(JFilechooser.~~~)点后面是一些枚举类型的常量,如:FILES_AND_DIRECTORIES,FILES_ONLY......这个是限定选择的文件类型。

3、showOpenDialog(choose1);弹出一个文件选择器对话框。

4、getSelectedFile();获得选择的文件,返回值是File类型。

      之前关流就直接在try里面将流关闭,现在学习到应该在finally里面去关,而且要考虑会出现异常的地方该怎么处理。首先声明输入流和输出流,并将它们赋值为空。

异常一:如果在文件输入输出流之前就出现了异常,那么程序就直接到catch块里面去,如果把流的关闭写在try里面显然是不行的。由于finnally是一定会执行的,所以可以将关流的操作写在里面。

异常二:在try的末尾出现异常,在执行finally的时候要判断流是否为空,只有当它不为空时才能关闭,否则会报空指针异常,这是一个运行是异常。

异常三:如果在finally里面,在关流前出现了异常,这时我们可以将流赋值为null,断开栈内存与堆内存,将这块内存变为垃圾内存,交给虚拟机去进行垃圾回收。

        做这个也花了一天半的时间,时间虽然不长,但我自己觉得是一门心思的在做这个,只想着要把它完成好,也许界面写的不漂亮,功能也有许多漏洞,但这次我是在遇到问题解决问题,不像以前那样,一个很小的问题就要去问别人。通过这个项目,也有了一个知识的回顾,一个寒假没怎么写过代码,现在也找到了一点写代码的感觉了。其实很多事情不是做不到,而是你愿不愿意花时间、花精力去完成它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值