版主 第三题代码:- package test2;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- import java.util.List;
- /*
- 3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
- 要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
- (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
- */
- /*
- * 思路:
- * (1). 通过递归获取指定目录下的java源文件列表 并且使用正则表达式进行过滤 降符合要求的文件添加到文件列表里面
- * (2). 对获取到的合格的文件列表复制到指定文件加下面
- * */
- public class Test3{
- public static void main(String[] args) {
- File sourceFileDir =new File("D:\\testfolder"); //源文件文件夹对象
- File destinationFileDir =new File("D:\\testFileCopies"); //目标文件夹对象
- //1.构建过滤文件名的正则表达式
- //标准文件名要求:数字+名称.java e.g. 01Demo.java
- String fileNameRegex ="((0\\d+)Demo)(\\.java)";
- List<File> filteredJavaFileList =new ArrayList<File>();
-
- //2.按照标准生成符合条件的源文件对象列表和目标文件对象列表 ---递归方式生成
- getQualifiedFilesList(sourceFileDir, filteredJavaFileList, fileNameRegex);
-
- //3.把源文件列表中的文件复制到目标地址中
- copyFileList(filteredJavaFileList, destinationFileDir, fileNameRegex);
- }
-
- //把源文件列表中的文件复制到目标地址中
- private static void copyFileList(List<File> filteredJavaFileList,
- File destinationFileDir, String fileNameRegex) {
- for(File sourceJavaFile: filteredJavaFileList){
- //根据正则标准产生按照标准的文件夹名
- String newFileName = sourceJavaFile.getName().replaceAll(fileNameRegex, "$1$2$3");
- File destiJavaFile =new File(destinationFileDir, newFileName);
- System.out.println("原文件名:"+sourceJavaFile.toString()+"-----新文件名:"+ destiJavaFile);
- //复制单个文件
- copyFile(sourceJavaFile, destiJavaFile);
- }
- }
-
- //复制单个文件
- private static void copyFile(File sourceJavaFile, File destiJavaFile) {
- BufferedReader bufr =null;
- BufferedWriter bufw =null;
-
- try{
- //源(InputStream/Reader)--->文本(Reader)--->设备(硬盘文件 FileReader) --->高效(BufferedReader)
- bufr =new BufferedReader(new InputStreamReader(new FileInputStream(sourceJavaFile), "GBK"));
- //目标(OutputStream/Writer)--->文本(Writer)--->设备(硬盘文件 FileWriter) --->高效(BufferedWriter)
- bufw =new BufferedWriter(new FileWriter(destiJavaFile));
-
- String lineContent =null;
- System.out.println(sourceJavaFile);
- while((lineContent =bufr.readLine()) !=null){
- bufw.write(lineContent);
- bufw.newLine();
- bufw.flush();
- }
- }catch(IOException ioe){
- System.out.println(ioe.toString());
- }finally{
- try{
- if(bufr !=null)
- bufr.close();
- }catch(IOException ioe){
- System.out.println(ioe.toString());
- }
-
- try{
- if(bufw !=null)
- bufw.close();
- }catch(IOException ioe){
- System.out.println(ioe.toString());
- }
- }
- }
- private static void getQualifiedFilesList(File sourceFileDir,
- List<File> filteredJavaFileList, String fileNameRegex) {
- File[] files =sourceFileDir.listFiles();
- //递归获取符合fileNameRegex标准的java源文件列表
- for(int x =0; x <files.length; x++){
- if(files[x].isDirectory()) //遍历的是目录
- getQualifiedFilesList(files[x], filteredJavaFileList, fileNameRegex);
- else{//遍历到的是文件
- String oldFileCanonicalName =files[x].getName();
- //符合要求规则的全部加进来
- if(oldFileCanonicalName.matches(fileNameRegex)){
- //添加符合条件的源文件对象
- filteredJavaFileList.add(files[x]);
- }
- }
- }
-
- }
- }
复制代码 运行结果如图:
|
|