- public static void main(String[] args) throws IOException {
- File originFile = new File("d:\\java");//源目录
- String destParent = "d:\\jad";//目标目录
- String replace = ".jad";//更改为的类型名
- File destFile = new File(destParent);//构造目标目录文件
- if (!destFile.exists()) {
- destFile.mkdir();//创建
- }
- // 获取目录下的所有类型为.java的文件并存在typeFiles集合中
- ArrayList<File> typeFiles = new ArrayList<File>();
- ArrayList<File> originFileList = listFiles(originFile,typeFiles);
- // 遍历集合
- Iterator<File> it = originFileList.iterator();
- while (it.hasNext()) {
- File origin = it.next();
- FileReader fr = new FileReader(origin);
- String fileName = editFile(origin, replace).getName();//修改后的文件名
- // 用目标文件和改后的文件名构造文件,构造字符输出流
- FileWriter fw = new FileWriter(new File(destParent, fileName));
- // 拷贝文件
- copyFile(fr, fw);
- }
- }
- /**
- * 修改文件类型
- *
- * @param files 要修改的目录集合
- * @param replace 修改类型名称(以.开始,如.jad)
- * @return 目录集合
- */
- public static ArrayList<File> editFiles(ArrayList<File> files, String replace) {
- ArrayList<File> fileList = new ArrayList<File>();
- Iterator<File> it = files.iterator();
- while (it.hasNext()) {
- String fileName = it.next().getName().replaceAll("\\.java$", replace);
- fileList.add(new File(fileName));
- }
- return fileList;
- }
- /**
- * 修改文件类型
- * @param file 要修改的文件
- * @param replace 替换的类型名称(以.开始,如.jad)
- * @return 修改后的文件
- */
- public static File editFile(File file, String replace) {
- return new File(file.getName().replaceAll("\\.java$", replace));
- }
- // 拷贝文件,通过缓冲技术来提高缓冲效率
- public static void copyFile(FileReader fr, FileWriter fw) {
- BufferedReader br = new BufferedReader(fr);
- BufferedWriter bw = new BufferedWriter(fw);
- String str;
- try {
- while ((str = br.readLine()) != null) {
- bw.write(str);// 写出一行
- bw.newLine();// 换行
- bw.flush();// 刷新
- }
- } catch (IOException e) {
- throw new RuntimeException("IO异常!");
- } finally {
- if (bw != null) {
- try {
- bw.close();
- } catch (Exception e1) {
- throw new RuntimeException("字节缓冲输出流未关闭!!");
- }
- }
- if (br != null) {
- try {
- } catch (Exception e2) {
- throw new RuntimeException("字节缓冲输入流未关闭!!");
- }
- }
- }
- }
- /**
- * 遍历目录
- * @param originFile 要遍历的目录
- * @param typeFiles 存储符合条件目录的集合
- * @return
- */
- public static ArrayList<File> listFiles(File originFile, ArrayList<File> typeFiles) {
- // 获取源目录下的所有文件
- File[] files = originFile.listFiles();
- // 遍历
- for (File file : files) {
- if (file.isDirectory()) {
- listFiles(file, typeFiles);
- } else {
- // 添加.java结尾的文件到目录集合
- if (file.getName().endsWith(".java")) {
- typeFiles.add(file);
- }
- }
- }
- return typeFiles;
- }
复制代码 最终代码,想得难免有所不周,贴出来还请指正
|