java做一个简单的文件管理器(一)

来源:互联网 发布:python popen ssh 编辑:程序博客网 时间:2024/06/13 12:59

前言

马上大四了,在大三结束后进入一家国企的研发组工作,短短的两个月实习大部分时间都是在自己学习。最近几天突然有点困倦,决定把之前做的一些东西分享出来。

目的与内容

运用面向对象程序设计思想,基于Java文件管理和I/O框架,实现基于图形界面的GUI文件管理器。
1、实现文件夹创建、删除、进入。
2、实现当前文件夹下的内容罗列。
3、实现文件拷贝和文件夹拷贝(文件夹拷贝指深度拷贝,包括所有子目录和文件)。
4、实现指定文件的加密和解密。
5、实现指定文件和文件夹的压缩。
6、实现压缩文件的解压。
7、文件管理器具有图形界面。


分析

平时都是在使用系统的资源管理器,突然自己写一个会感到措手不及。但是当经过分层次的分析之后,会发现其实将一个文件管理器简析出来之后,会发现脉络特别清晰。因为实际上你真正要操作的是一个字符串,而它代表的就是具体的文件或文件夹。

  1. 界面:仅仅负责展示所有尽可能可以展示的信息
  2. 操作:根据当前指定的路径来选择要做的行为
  3. 路径:这里我们只需要返回当前的路径。

如何得到我们想要操作的路径

  1. 我们需要先抽象一系列的方法,而通过这些方法,我们可以得到对于一个文件来说我们所有想要的属性:
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();}
  1. 去实现这些方法
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();    }}

未完。。。

原创粉丝点击