两次学习中学习到了I/O有关知识,第一次是做了一个文件搜索器,第二次是实现系统右键复制粘贴功能。
文件搜索器主要是用到了获取文件路径、获取文件名以及判断该文件是文件夹还是文件这三种主要的功能。首先获取文件夹路径(f.getAbsolutePath()),判断该文件是文件夹还是文件(file.isDirectory(),file.exists()),是文件夹则继续深入,是文件就返回文件路径,并且通过关键字搜索(f.contains(keyword),f是一个String类,此功能为判断该字符中是否包含keyword指定的字符)筛选文件。这个文件搜索器虽然可以搜索到文件路径,却依然还要自己去系统里面找。不能和系统搜索文件一样,搜索到后点击那个文件路径就可以访问到文件。这个功能还有待实现。还有就是当窗口变小时候那个搜索文本框和关键字文本框也会改变,缩的很小时候,这两个文本框就位置乱了。底下那两个标签也是一样位置会乱,我暂时就禁止了窗口可以改变这个功能。这个问题还有待完善。不过可以用弹簧式布局(SpringLayout )或者箱式布局(BoxLayout) 来改变。在文本框自身和容器之间加支架和弹簧就应该可以了。
右键复制粘贴功能就更简单一些了,就是利用文件输入流和输出流来实现,
FileInputStream fileread = new FileInputStream(filename);
FileOutputStream out = new FileOutputStream(destname);
int i = fileread.read();
out.write((char)i);
filein.close();
out.close();
输入流把文件内容读出来,输出流再把文件输出到指定位置。可以一个字节一个字节的读取和输出,不过这样文件复制过程过于缓慢,小文件还好,大文件就完全不行了。还可以一次性完全读取整个文件的字节,把它存入一个数组中,然后再一次性输出。但是这样也有大问题,就是数组大小不容易定,并且如果文件太大,有溢出内存的危险,也是甚为不好。于此,只好折衷,一段一段的来读取输出,但是这个时候拿什么去存储这一段字节流目前对我来说又是个问题,拿数组还是拿集合?数组固定大小,如果读到最后一段字节,这最后一段字节又小于这个数组容器,那最后会连数组空余的那部分也同样输入进目标文件!这个度不好掌握,仍需仔细思考。集合又究竟是怎么存储的?拿什么集合好?关于集合这一块暂时还了解的不太清楚,这个问题依旧有待学习和思考!最后一定记得把文件输入输出流都要关闭,还要记得输入输出流都有异常需要捕捉。
还有了解到了文件加密这个问题,文件加密简单说就是把读取到的字节流通过一定的规则转换成另外的字节流,这个规则可以是每个字节“+1”,也可是“+2”,但是都是过于简单,要想达到安全,那这个规则就得诡异!有待深入学习和思考。
文件搜索器主要是用到了获取文件路径、获取文件名以及判断该文件是文件夹还是文件这三种主要的功能。首先获取文件夹路径(f.getAbsolutePath()),判断该文件是文件夹还是文件(file.isDirectory(),file.exists()),是文件夹则继续深入,是文件就返回文件路径,并且通过关键字搜索(f.contains(keyword),f是一个String类,此功能为判断该字符中是否包含keyword指定的字符)筛选文件。这个文件搜索器虽然可以搜索到文件路径,却依然还要自己去系统里面找。不能和系统搜索文件一样,搜索到后点击那个文件路径就可以访问到文件。这个功能还有待实现。还有就是当窗口变小时候那个搜索文本框和关键字文本框也会改变,缩的很小时候,这两个文本框就位置乱了。底下那两个标签也是一样位置会乱,我暂时就禁止了窗口可以改变这个功能。这个问题还有待完善。不过可以用弹簧式布局(SpringLayout )或者箱式布局(BoxLayout) 来改变。在文本框自身和容器之间加支架和弹簧就应该可以了。
右键复制粘贴功能就更简单一些了,就是利用文件输入流和输出流来实现,
FileInputStream fileread = new FileInputStream(filename);
FileOutputStream out = new FileOutputStream(destname);
int i = fileread.read();
out.write((char)i);
filein.close();
out.close();
输入流把文件内容读出来,输出流再把文件输出到指定位置。可以一个字节一个字节的读取和输出,不过这样文件复制过程过于缓慢,小文件还好,大文件就完全不行了。还可以一次性完全读取整个文件的字节,把它存入一个数组中,然后再一次性输出。但是这样也有大问题,就是数组大小不容易定,并且如果文件太大,有溢出内存的危险,也是甚为不好。于此,只好折衷,一段一段的来读取输出,但是这个时候拿什么去存储这一段字节流目前对我来说又是个问题,拿数组还是拿集合?数组固定大小,如果读到最后一段字节,这最后一段字节又小于这个数组容器,那最后会连数组空余的那部分也同样输入进目标文件!这个度不好掌握,仍需仔细思考。集合又究竟是怎么存储的?拿什么集合好?关于集合这一块暂时还了解的不太清楚,这个问题依旧有待学习和思考!最后一定记得把文件输入输出流都要关闭,还要记得输入输出流都有异常需要捕捉。
还有了解到了文件加密这个问题,文件加密简单说就是把读取到的字节流通过一定的规则转换成另外的字节流,这个规则可以是每个字节“+1”,也可是“+2”,但是都是过于简单,要想达到安全,那这个规则就得诡异!有待深入学习和思考。