今天在看《Head First 设计模式》这本书,书是好书,但是源码写的太碎了,并且每个源码文件都只有几行,看起来很不方便。于是便想将每章的所有源码收集成单独的一个大文本文件中,方便阅读。
下面是我用Java写的一个小程序,用python的话应该更简单,但是懒得折腾了。
import java.io.*;
public class TextFileCollector{
public static void main(String[] args) {
//要收集的文件夹路径
String srcFolder = "D:/JavaApp/headfirst设计模式源代码/observer/WeatherStation";
//要收集的文件后缀
String suf = ".java";
//目标文件所在的文件夹
String dstFolder = "D:/JavaApp/acm/";
//目标文件名称
String dstFile = "2.java";
//得到目标文件所在的文件夹的文件列表
String[] fileList = new File(srcFolder).list(new MyFilenameFilter(suf));
TextFileCollector tc = new TextFileCollector();
for(String name : fileList)
{
tc.changeTxtFile(srcFolder, name, dstFolder, dstFile);
}
}
/*
* 将源文本文件的内容拷贝到指定的目标文件。
* srcFolder:源文件所在的文件夹路径
* srcFile:源文件名称
* dstFolder:目标文件所在的文件夹路径
* dstFile:目标文件名称
* */
public void changeTxtFile(String srcFolder, String srcFile, String dstFolder, String dstFile)
{
FileReader fr = null;
FileWriter fw = null;
//boolean append = true;
try{
fr = new FileReader(new File(srcFolder+"/"+srcFile));
fw = new FileWriter(new File(dstFolder+"/"+dstFile), true);
BufferedReader br = new BufferedReader(fr);
String row;
fw.append("//"+srcFile+"\n");
while((row=br.readLine()) != null)
{
fw.append(row+"\n");
}
fw.write("\n\n");
fr.close();
fw.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class MyFilenameFilter implements FilenameFilter
{
private String suffix;
public MyFilenameFilter(String suffix)
{
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
boolean flag = name.endsWith(suffix);
return flag;
}
}