Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js

1. 解析原理与流程1

1.1. 判断目录  ,表示服  dirFlagChar = "└├─";1

1.2. 剑豪制表符出现的位置与文件夹级别对应表1

1.3. 主要判读流程2

2. Tree结果2

3. Code----3

4. 结果5

1. 解析原理与流程

1.1. 判断目录  ,表示服  dirFlagChar = "└├─";

其中-类似于剑豪的制表符是表示目录的。。够好表示最后的目录,t制表符表示中间的目录。。

1.2. 剑豪制表符出现的位置与文件夹级别对应表

prefix

lev1

2

1

5

2

6

2

9

3

12

4

13

4

16

5

17

5

20

6

21

6

24

7

27

8

28

8

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

1.3. 主要判读流程

if (level_curdir > level_lastdir)

lastDir = lastDir + "/" + curdirName;

else if(level_curdir==level_lastdir)

lastDir = getCurDirParent(level_curdir, lastDir) + "/"+curdirName;

else

lastDir = getCurDirParent(level_curdir, lastDir) + "/"

2. Tree结果

文件夹 PATH 列表

卷序列号为 802A-6864

C:.

│  .classpath

│  .mymetadata

│  .myumldata

│  .project

│  build.xml

│  myprocessdefinition1.xml

│  readme.txt

│  tree.txt

├─.settings

│      com.genuitec.eclipse.j2eedt.core.prefs

├─src

│  │  applicationContext-actions.xml

│  │  applicationContext-beans.xml

│  │  applicationContext-common.xml

│  │  hibernate.cfg.xml

│  │  init_datas.xml

│  │  jbpm.cfg.xml

│  │  log4j.properties

│  │  MessageResources.properties

│  │  test.java

3. Code----

public class TreeUtil {

private String encode;

private String path;

public TreeUtil(String p, String e) {

path = p;

encode = e;

}

public static String lastDir;

public static void main(String[] args) {

// TODO Auto-generated method stub

// 4>1,7>2,11>3,13>4

// dir 2>2, 5>3,9>4, 13>5 17>6 20>7

// countLengestFolderPath();

final String start = "c:\\myoa";

String dirFlagChar = "└├─";

final String dirFlagChar1 = "─";

AFile f = new AFile("c:\\myoa\\tree.txt", "gbk");

final Set st = Sets.newConcurrentHashSet();

lastDir = "";

final DbStroreEngieen dbs = new DbStroreEngieen(pathx.webAppPath()

+ "/db/db1");

final List<Map> table = dbs.getTableRecs("dirLevel");

f.trave(new Closure<String, Object>() {

@Override

public Object execute(String line) throws Exception {

if (line.contains(dirFlagChar1)) {

int preIndex = line.indexOf(dirFlagChar1) + 1;

String curdirName = get_curdirName(preIndex, line);

if( curdirName.equals("com"))

System.out.println("dbg");

Map row = dbs.getRow(table, "prefix", preIndex);

int level_curdir = new ANum( row.get("lev1")).toInt();

int level_lastdir = get_level_curdir(lastDir);

if (level_curdir > level_lastdir) //src/com/zhaohui/oa/freemarker/templates

lastDir = lastDir + "/" + curdirName;

else if(level_curdir==level_lastdir)

lastDir = getCurDirParent(level_curdir, lastDir) + "/"+curdirName;

else

lastDir = getCurDirParent(level_curdir, lastDir) + "/"

+ curdirName;

lastDir=  AString.LTrim(lastDir,"/");

st.add(preIndex);

String idex = new ANum(preIndex).toStr();

//System.out.println(idex + ":" + line);

System.out.println(lastDir);

}

return null;

}

//1    ".sett"

private String getCurDirParent(int level_curdir, String lastDir) {

String[] a = lastDir.split("/");

List<String> li = Lists.newArrayList();

for (int i = 0; i < level_curdir-1; i++) {

li.add(a[i]);

}

return com.attilax.collection.CollectionUtils.join(li, "/");

}

private String get_curdirName(int preIndex, String line) {

// TODO Auto-generated method stub

return line.substring(preIndex);

}

private int get_level_curdir(String lastDir) {

if(lastDir.equals("")) return 0;

String[] a = lastDir.split("/");

return a.length ;

}

});

List li = Lists.newArrayList();

li.addAll(st);

Collections.sort(li);

// List li2=

// from(li).orderby().exe();

// ACollections.set2list(st);

System.out.println(AtiJson.toJson(li));

System.out.println("--f");

}

4. 结果

.settings

src

dbg

src/com

src/com/zhaohui

src/com/zhaohui/oa

src/com/zhaohui/oa/freemarker

src/com/zhaohui/oa/freemarker/templates

src/com/zhaohui/oa/manager

src/com/zhaohui/oa/manager/impl

src/com/zhaohui/oa/model

src/com/zhaohui/oa/util

src/com/zhaohui/oa/web

src/com/zhaohui/oa/web/actions

src/com/zhaohui/oa/web/forms

test

Dbg

----end

Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js的更多相关文章

  1. Dicom格式文件解析器[转]

    Dicom格式文件解析器   Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯那方面的问题 只讲*.dcm 也就是diocm格式文件的读取,读取本身是没啥难度的 无非就是字节码数据流处理.只不 ...

  2. Atitit.论图片类型 垃圾文件的识别与清理  流程与设计原则 与api概要设计 v2 pbj

    Atitit.论图片类型 垃圾文件的识别与清理  流程与设计原则 与api概要设计 v2 pbj 1. 俩个问题::识别垃圾文件与清理策略1 2. 如何识别垃圾图片1 2.1. 体积过小文件<1 ...

  3. javap -- Java 类文件解析器

    参考文档 http://blog.chinaunix.net/uid-692788-id-2681132.html http://docs.oracle.com/javase/7/docs/techn ...

  4. C++PE文件格式解析类(轻松制作自己的PE文件解析器)

    PE是Portable Executable File Format(可移植的运行体)简写,它是眼下Windows平台上的主流可运行文件格式. PE文件里包括的内容非常多,详细我就不在这解释了,有兴趣 ...

  5. 浏览器中“JavaScript解析器”工作原理

    浏览器在读取HTML文件的时候,只有当遇到<script>标签的时候,才会唤醒所谓的“JavaScript解析器”开始工作. JavaScript解析器工作步骤: 1.“找一些东西”: v ...

  6. springMVC:为MultipartFilte配置了上传文件解析器,报错或不能使用

    一.问题描述为支持restful风格请求,并且应对可能上传文件的情况,需要在配置hiddenHttpMethodFilter过滤器之前配置MultipartFilter.目的是让MultipartFi ...

  7. XML的四种解析器(dom_sax_jdom_dom4j)原理及性能比较[收藏]

    1)DOM(JAXP Crimson解析器)    DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定 ...

  8. 《自己动手写框架2》:用200行的DBF解析器来展示良好架构设计

    因为工作关系.须要工作其中,须要读取DBF文件.找了一些DBF读取开源软件,要么是太过庞大,动不动就上万行.要么是功能有问题,编码,长度,总之是没有找到一个很爽的. 在万般无奈之下,我老人家怒从心头起 ...

  9. Dicom格式文件解析器

    转自:http://www.cnblogs.com/assassinx/archive/2013/01/09/dicomViewer.html Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯 ...

随机推荐

  1. ASP.NET Core 2.2 基础知识(一) 依赖注入

    依赖: 类A用到了类B,我们就说类A依赖类B.如果一个类没有任何地方使用到,那这个类基本上可以删掉了. public class Test { private MyDependency md = ne ...

  2. [BZOJ 2817] 波浪

    Link: BZOJ 2817 传送门 Solution: 算是比较神的DP了吧, 首先这个绝对值处理起来很难受,肯定要想办法去掉 于是想到从小到大插入的方式,便不存在绝对值的问题了 插入一个数只有5 ...

  3. 【dfs】bzoj3563 DZY Loves Chinese

    因为我们可以通过把某一行读到末尾来获取真正的K,所以把它和假K异或之后就是之前联通的次数(异或的逆运算为其本身).最后一次的暴力一下. #include<cstdio> #include& ...

  4. 【前缀和】【分类讨论】hdu5163 Taking Bus

    #include<cstdio> using namespace std; int T,n,m,x,y; long long sum[100001],ans,d[100001]; int ...

  5. 【贪心】bzoj3709 [PA2014]Bohater

    把怪分成两类看: 一.回血>损血 则若先杀损血少的再杀损血多的,则为当前这一步提供了更高的可能性.因为血量是单增的,所以尽量用较少的血量去干♂耗血较少的怪物. 二.回血<损血 则若先杀回血 ...

  6. 【动态规划】【记忆化搜索】1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组

    跟CODEVS 3415没有什么区别,也不用高精度. http://www.cnblogs.com/autsky-jadek/p/4055184.html #include<cstdio> ...

  7. 求斐波那契数的python语言实现---递归和迭代

    迭代实现如下: def fab(n): n1 = 1 n2 = 1 if n<1: print("输入有误!") return -1 while (n-2)>0: n3 ...

  8. 在Delphi中使用键盘勾子获取键盘输入(译--5月7日)

    http://blog.sina.com.cn/s/blog_502b2e970100949s.html 获取键盘输入以控制无法接受输入焦点的控件考虑一些游戏,显示图片在TPainBox,但是TPai ...

  9. t-sql 笔记(1)

    Toad-for-SQL-Server-Freeware 1.查询哪些数据库对象使用了某个表 SELECT b.[name], a.[definition] FROM sys.all_sql_modu ...

  10. mysql show profiles使用分析sql性能

    mysql show profiles使用分析sql性能 Show profiles是5.0.37之后添加的,要想使用此功能,要确保版本在5.0.37之后. 查看一下我的数据库版本 mysql> ...