import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestHuanhang {
/*
*適用於windows平台將一個目錄下的所有檔案的unix分行符號/x0a轉換成/x0d/x0a
* 後存放在另外一個檔案夾,請使用不同的檔案夾名
* 參數1,源檔案夾,參數2目標檔案夾,參數3 過濾的Regex.參數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) {
}
}
}
}