从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中,并统计java文件的个数.
提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java,
另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可
[Java] 纯文本查看 复制代码 public class Test03 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要复制的文件夹路径:");
String path = sc.nextLine();
// 创建源文件对象
File srcDir = new File(path);
// 创建目标文件对象
File destDir = new File("C:\\Users\\Administrator\\Desktop\\practice2");
// 拷贝文件夹
copyDir(srcDir, destDir);
}
// 复制方法
public static void copyDir(File srcDir, File destDir) throws IOException {
// 判断源文件是否存在,不存在直接退出
if (!srcDir.exists()) {
System.out.println("源文件不存在!");
return;
}
// 判断是否是文件夹
if (srcDir.isDirectory()) {
File[] fileList = srcDir.listFiles();
for (File f : fileList) {
copyDir(f, destDir);
}
} else {
// 如果不是文件夹即是文件,文件直接拷贝
// 创建字节输入流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcDir));
// 创建要复制的文件
File destFile = new File(destDir, srcDir.getName());
// 判断当前目录下是否有重名文件
if (destFile.exists()) {
// 如果存在就改名
Random r = new Random();
String[] arr = srcDir.getName().split("\\.");
StringBuilder builder = new StringBuilder();
//采用三位随机数字拼接的方式防止重名
builder.append(arr[0]).append(r.nextInt(10)).append(r.nextInt(10)).append(r.nextInt(10)).append(".").append(arr[1]);
String child = builder.toString();
destFile = new File(destDir, child);
}
// 创建字节输出流对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] b = new byte[1024 * 8];
int len;
// 写入目标文件夹
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
bos.flush();
}
bos.close();
bis.close();
}
}
} |