package com.enjoyor.soa.traffic.server.tms.controller;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

public class FileNameTest {

private static String readFile(String filename) {
filename = filename.trim();
if (readFiles.contains(filename)) {
//循环include,则直接返回
return "######Error to read " + filename +"\n";
}

BufferedReader reader = null;
try {
readFiles.add(filename);
reader = new BufferedReader(new FileReader(filename));
String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
int includeIndex = line.indexOf(INCLUDE);
if (includeIndex >= 0) {
String file = line.substring(includeIndex + INCLUDE.length());
line = readFile(file);
sb.append(line);
} else {
sb.append(line + "\n");
}
}
readFiles.remove(filename);
return sb.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

return null;
}

private static Set<String> readFiles = new HashSet<String>();
private static final String INCLUDE = "#include";
public static void main(String[] args) {
/**
* 文件内容如下:
-----------------
a.txt
A
#include b.txt
#include c.txt
#include d.txt
----------------
b.txt
B B
----------------
c.txt
C C C
----------------
d.txt
D D D D
#include b.txt
#include c.txt
---------------
e.txt
E E E E E
#include d.txt
#include e.txt
*/
String filename = "C:/Users/xujianjun/Desktop/a.txt";
System.out.println("Read a.txt---->");
String content = readFile(filename);
System.out.println(content);

filename = "C:/Users/xujianjun/Desktop/d.txt";
System.out.println("Read d.txt---->");
content = readFile(filename);
System.out.println(content);

filename = "C:/Users/xujianjun/Desktop/e.txt";
System.out.println("Read d.txt---->");
content = readFile(filename);
System.out.println(content);
}
}

filename的更多相关文章

  1. shell 1>&2 2>&1 &>filename重定向的含义和区别

    当初在shell中, 看到">&1"和">&2"始终不明白什么意思.经过在网上的搜索得以解惑.其实这是两种输出. 在 shell 程 ...

  2. 织梦多语言站点,{dede:include filename=''/}引入问题

    织梦模板include插入非模板目录文件出现"无法在这个位置找到"错误的解决办法 以下是dede V55_UTF8 查dede include标签手册 (3) include 引入 ...

  3. [Tool] SourceTree操作中遇到错误(Filename too long)的解决方案

    [Tool] SourceTree操作中遇到错误(Filename too long)的解决方案 问题情景 使用SourceTree,可以方便开发人员使用图形化接口的Git指令来管理原始码.但是在Wi ...

  4. NodeJs:module.filename、__filename、__dirname、process.cwd()和require.main.filename

    转载于: http://blog.csdn.net/bugknightyyp/article/details/17999473 module.filename:开发期间,该行代码所在的文件. __fi ...

  5. System.load(String filename)和System.loadLibrary(String libname)的区别

    前言 之前一篇文章在写Native方法的时候,第一个步骤里面有这么一段代码 static { System.load("D:" + File.separator + "H ...

  6. primefaces p:dataExporter filename 支持中文 utf8

    p:fileDownload and p:dataExporter : for p:fileDownload, the Content-Disposition header should be set ...

  7. ruby -- 基础学习(九)filename去除扩展名

         Rails -- filename去除扩展名 简单例子:params[:upload]['preview'].original_filename 的值为templateOne.html.er ...

  8. The URL "filename" is invalid. It may refer to a nonexistent file or folder, or refer to a valid file or folder that is not in the current Web

    Sharepoint Error : The URL "filename" is invalid. It may refer to a nonexistent file or fo ...

  9. 大型文档源文件拆分编辑编译\include{filename}

    大型文档,如果把所有的文字都录入在同一个.tex文件中,那个文件的体积是不可估量的,文件的结构式混乱不堪的,文字的定位也是令人头疼的.幸亏latex提供了结构化的处理命令---include. 命令\ ...

  10. git rm –cached filename

    为了能重新忽略那些已经被track的文件,例如停止tracking一个文件但是又不从仓库中删除它.可以使用以下命令: 代码如下 git rm –cached filename 上面这个命令用于删除单个 ...

随机推荐

  1. linux:基本概念和操作

    1. 终端 Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录,在物理机系统上你可以通过使用[Ctrl]+[ ...

  2. app相关的一些网站

    https://www.qimai.cn   排名排行关键字原aso100

  3. 分区实践 注意分区名 p2018-01 p2018-02 被解释为同一分区名

    # https://dev.mysql.com/doc/refman/5.6/en/partitioning-columns-range.html'''CREATE TABLE employees ( ...

  4. 拳打Adam,脚踢SGD:北大提出全新优化算法AdaBound

    https://mp.weixin.qq.com/s/el1E-61YjLkhFd6AgFUc7w

  5. [UI] UI things

    反正我不懂. 但是很酷. https://facebook.github.io/react/ https://cn.vuejs.org/ https://angular.cn/

  6. 如何让html中的td文字只显示部分

    以下笔记有待测试 ———————————————————— <table style="table-layout:fixed"> <tr> <td s ...

  7. webmin小结

    centos7安装webmin https://www.cnblogs.com/andy9468/p/10537201.html webmin重置密码 重置webmin账户root的密码为例: htt ...

  8. MySQL数据库改名的三种方法

    前不久去面试,被问到Innodb引擎的表如何改数据库名,当时我也只回答了MyISAM改如何操作,被一些细节问题打败,真是操蛋. 如果表示MyISAM那么可以直接去到数据库目录mv就可以. Innodb ...

  9. wordpress 无法发送邮件

    前几天创建了几个wordpress项目,有些项目中用到了用户注册,但是在实际操作中发现,用户注册无法接收到认证链接,在查找了相关资料后大多归类为几个原因: 服务器本身不支持mail()函数 未配置相关 ...

  10. Lua搜索特殊字符

    local newtext = "." local index1 = string.find(newtext,"%.") 在这里,"."是通 ...