java做一个简单的文件管理器(一)
来源:互联网 发布:python popen ssh 编辑:程序博客网 时间:2024/06/13 12:59
前言
马上大四了,在大三结束后进入一家国企的研发组工作,短短的两个月实习大部分时间都是在自己学习。最近几天突然有点困倦,决定把之前做的一些东西分享出来。
目的与内容
运用面向对象程序设计思想,基于Java文件管理和I/O框架,实现基于图形界面的GUI文件管理器。
1、实现文件夹创建、删除、进入。
2、实现当前文件夹下的内容罗列。
3、实现文件拷贝和文件夹拷贝(文件夹拷贝指深度拷贝,包括所有子目录和文件)。
4、实现指定文件的加密和解密。
5、实现指定文件和文件夹的压缩。
6、实现压缩文件的解压。
7、文件管理器具有图形界面。
分析
平时都是在使用系统的资源管理器,突然自己写一个会感到措手不及。但是当经过分层次的分析之后,会发现其实将一个文件管理器简析出来之后,会发现脉络特别清晰。因为实际上你真正要操作的是一个字符串,而它代表的就是具体的文件或文件夹。
- 界面:仅仅负责展示所有尽可能可以展示的信息
- 操作:根据当前指定的路径来选择要做的行为
- 路径:这里我们只需要返回当前的路径。
如何得到我们想要操作的路径
- 我们需要先抽象一系列的方法,而通过这些方法,我们可以得到对于一个文件来说我们所有想要的属性:
public interface I_Node { //获取指定索引节点文件的子文件节点 public abstract Object getChild(String fileKind, int index); //获取指定子文件 public abstract Object getChildFile( int index) ; //返回根节点 public abstract Object getRoot(); //获取子节点数目 public abstract int getChildCount(String fileKind); //获取文件名 public abstract String toString(); //获取文件图标 public abstract Icon getIcon(); //判断是否是叶节点 public abstract boolean isLeaf(); //获取文件路径 public abstract String getPath(); //获取父节点 public abstract Object getParent(); //获取当前节点 public abstract Object getCurrent(); //添加孩子节点 public abstract void addChild(I_Node node); //获取当前文件 public abstract File getFile(); //删除节点文件 public abstract void deleteChild(I_Node node); //获取文件大小 public abstract long getSize(); //删除所有孩子节点 public abstract void removeAllChildren();}
- 去实现这些方法
public class FileNode implements I_Node {//文件的一些基本的信息和对其的一些基本操作 private Vector<File> allFiles = new Vector<File>(); private Vector<File> folder = new Vector<File>(); private FileSystemView fileSystemView = FileSystemView.getFileSystemView(); private File file = null; private long dirLenth = 0; public FileNode() { file = fileSystemView.getHomeDirectory(); addChildren(); } public FileNode(File file) { this.file=file; addChildren(); } //添加单个孩子文件 public void addChild(I_Node node) { allFiles.add(node.getFile()); } //添加多个孩子文件 private void addChildren() { File[] fileList = fileSystemView.getFiles(file, true); for (File file : fileList) { allFiles.add(file); if (file.isDirectory() && !file.getName().toLowerCase().endsWith(".lnk")) { folder.add(file); } } } //根据文件类型获取孩子数 public int getChildCount(String fileKind) { if (fileKind.equals("files")) { //所有文件 return allFiles.size(); } else if (fileKind.equals("folder")) { //文件夹类型 return folder.size(); } else { return 0; } } //根据文件类型获取指定孩子节点 public Object getChild(String fileKind, int index) { if (fileKind.equals( "files")) { return new FileNode(allFiles.get(index)); } else if (fileKind.equals("folder")) { return new FileNode(folder.get(index)); } else { return null; } } //获取指定孩子文件 public Object getChildFile( int index) { if(index<allFiles.size()){ return allFiles.get(index); } return null; } //获取父节点 public Object getParent() { return new FileNode(file.getParentFile()); } //获取根目录 public Object getRoot() { return this; } //获取文件名 public String toString() { return fileSystemView.getSystemDisplayName(file); } //获取文件图标 public Icon getIcon() { return fileSystemView.getSystemIcon(file); } //判断是否是叶节点 public boolean isLeaf() { return folder.size() == 0; } //获取文件路径 public String getPath() { return this.file.getPath(); } //获取当前节点 public Object getCurrent() { return this; } //获取当前文件 public File getFile() { return this.file; } //删除指定节点 public void deleteChild(I_Node node) { allFiles.remove(node.getFile()); } //获取当前节点大小 public long getSize() { if (this.getFile().isDirectory()) { return getDirSize(this.getFile().getPath()); } else { return getFileSize(); } } //获取文件大小 private long getFileSize() { return this.getFile().length(); } //获取文件夹大小 private long getDirSize(String dir) { File[] fileList = new File(dir).listFiles(); for (File file : fileList) { if (file.isDirectory()) { getDirSize(file.getPath()); } else { dirLenth = dirLenth + file.length(); } } return dirLenth; } //删掉所有子文件 public void removeAllChildren() { this.allFiles.removeAllElements(); }}
未完。。。
阅读全文
1 0
- java做一个简单的文件管理器(一)
- java做一个简单的文件管理器(二)
- 一个简单的文件管理器
- 做一个简单的井字棋(一)
- 利用JAVASCRIPT做个简单的文件管理器
- 简单的文件管理器
- 一个简单java布局管理器
- C#——一个简单的文件管理器
- Java网络编程(一):利用Java技术读取网页做一个简单爬网页上邮箱的网络蜘蛛
- ASP.Net做的简易版文件管理器,就一个aspx文件的版本
- 一个简易的文件管理器
- 利用java做一个简单的计算器
- 利用java做一个简单的计算器
- 利用java做一个简单的计算器
- 用java做一个简单的二维码
- 用java做一个简单的万年历
- 一个简单的Android进程管理器(初稿)
- 一个简单的Android进程管理器(初稿)
- iOS基础-高级进阶面试题
- 八种排序算法Java实现-冒泡和选择排序
- ThinkPHP5 响应输出
- TP上传文件 临时文件夹不存在
- 没有借款8000万,哪来的《战狼Ⅱ》票房16亿!
- java做一个简单的文件管理器(一)
- lvs-keepavlied 安装配置 02长连接
- python下几种打开文件的方式(你习惯的不一定是最好的)
- SPI总线协议及SPI时序图详解
- mybatis配置文件
- [LeetCode]374. Guess Number Higher or Lower<Binary Search>
- Kafka技术
- ArcEngine保存为mxd的方法
- <<High-Speed Tracking with Kernelized Correlation Filters>> KCF(核化相关滤波)跟踪算法学习笔记