package li;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.junit.Test;
public class FileSeparator {
private static final String CLASS_REGEX = "^.*\\.class$";
@Test
public void main() {
File rootFolder = root();
List<String> fileList = list(rootFolder, CLASS_REGEX, true);
for (String classFileName : fileList) {
System.err.println(classFileName + "\t" + getClassName1(classFileName) + "\t" + getClassName2(classFileName) + "\t" + getClassName3(classFileName));
}
System.err.println("System.getProperty = " + System.getProperty("file.separator"));
System.err.println("File.separator = " + File.separator);
}
private static String getClassName1(String classFileName) {
try {
return classFileName.split("\\\\classes\\\\")[1].replaceAll("\\\\", ".").replace(".class", "");
} catch (Exception e) {
return "这个方法在非 win 下应抛异常 " + e;
}
}
private static String getClassName2(String classFileName) {
String separator = System.getProperty("file.separator");
try {
return classFileName.split("\\" + separator + "classes" + "\\" + separator)[1].replaceAll("\\" + separator, ".").replace(".class", "");
} catch (Exception e) {
return "" + e;
}
}
private static String getClassName3(String classFileName) {
try {
return classFileName.substring(classFileName.indexOf(File.separator + "classes" + File.separator) + 9, classFileName.length() - 6).replace(File.separatorChar, '.');
} catch (Exception e) {
return "" + e;
}
}
private static List<String> list(File file, String regex, Boolean increase) {
List<String> list = new ArrayList<String>();
if (file.isFile() && regex(file.getPath(), regex)) {
list.add(file.getPath());
} else if (increase && file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
list.addAll(list(f, regex, increase)); // 递归调用本方法
}
}
return list;
}
private static File root() {
return new File(Thread.currentThread().getContextClassLoader().getResource("").getPath());
}
private static Boolean regex(String input, String regex) {
return Pattern.compile(regex).matcher(input).find();
}
}