一个简单的目录节点类定义

来源:互联网 发布:淘宝虎扑伙伴是真的吗 编辑:程序博客网 时间:2024/05/20 10:55
public class DirNode implements Comparable<DirNode>{    public final DirNode parent;    public final int level;    public final String name;    private final String separator;    private String path;    public DirNode(DirNode parent, String name) {        this(parent,name,File.separator);    }    public DirNode(DirNode parent, String name,String separator) {        this.parent = parent;        this.level = parent == null ? 1 : parent.level + 1;        if(name == null || name.trim().length() == 0){            throw new IllegalArgumentException("Illegal node name");        }        this.name = name;        this.separator = separator;    }    public final String getPath() {        if(path == null){            path = computePath(this.separator);        }        return path;    }    public String computePath(String separator){        StringBuilder sb = new StringBuilder();        DirNode root = this;        sb.append(root.name).append(separator);        while (root.parent != null){            root = root.parent;            sb.insert(0,separator).insert(0,root.name);        }        return sb.toString();    }    public boolean isParent(DirNode node){        if(parent == null || node == null) return false;        DirNode root = this;        while (root.parent != null){            if(root.parent.equals(node)){                return true;            }            root = root.parent;        }        return false;    }    @Override    public int compareTo(@NonNull DirNode o) {        return this.level - o.level;    }    @Override    public String toString() {        return "DirNode{" +                "parent=" + (parent == null ? "null" : "@" + Integer.toHexString(parent.hashCode())) +                ", level=" + level +                ", name='" + name + '\'' +                ", separator='" + separator + '\'' +                ", path='" + getPath() + '\'' +                '}';    }}
原创粉丝点击