import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestHuanhang {
/*
*适用于windows平台将一个目录下的所有文件的unix换行符/x0a转换成/x0d/x0a
* 后存放在另外一个文件夹,请使用不同的文件夹名
* 参数1,源文件夹,参数2目标文件夹,参数3 过滤的正则表达式.参数4,新的换行符 .参数1,2,3都必须指定
参数4的格式为 crlf 或cr 或lf
* 目标文件夹和原文件夹都必须事先存在
* 一個命令的例子:java TestHuanhang . work .xml crlf
*/
public static void main(final String[] args) {
if (args.length < 3) {
System.out.println("请输入包含unix换行符所在文件的文件夹,和转换后所要放在的文件夹!和过滤的正则");
System.exit(0);
}
File srcFolder = new File(args[0]);
File destFolder = new File(args[1]);
if (!(srcFolder.isDirectory() && destFolder.isDirectory())) {
System.out.println("源文件夹和目标文件夹必须存在并且是目录!");
System.exit(0);
}
if (srcFolder.compareTo(destFolder) == 0) {
System.out.println("源文件夹和目标文件夹不能相同!");
System.exit(0);
}
if (args.length == 4 && !(args[3].equalsIgnoreCase("crlf") || args[3].equalsIgnoreCase("lf") || args[3].equalsIgnoreCase("cr"))) {
System.out.println("请指定正确的行分割符!例如crlf或cr或lf");
System.exit(0);
}
String sline = "";
if (args.length == 3) {
sline = "/n";
} else if (args[3].equalsIgnoreCase("crlf")) {
sline = Character.toString((char) 13) + Character.toString((char) 10);
} else if (args[3].equalsIgnoreCase("cr")) {
sline = Character.toString((char) 13);
} else {
sline = Character.toString((char) 10);
}
File[] srcs = srcFolder.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
Matcher m = Pattern.compile(args[2]).matcher(name);
if (m.find()) {
return true;
} else {
return false;
}
}
});
for (File src : srcs) {
BufferedReader br = null;
PrintWriter pw = null;
try {
try {
br = new BufferedReader(new FileReader(src));
pw = new PrintWriter(new File(destFolder.getAbsolutePath(), src.getName()));
String line;
while (null != (line = br.readLine())) {
pw.print(line + sline);
}
} finally {
try {
if (br != null) {
br.close();
}
} finally {
if (pw != null) {
pw.close();
}
}
}
} catch (Exception e) {
}
}
}
}