62,614
社区成员
发帖
与我相关
我的任务
分享
package com.baidu;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
/* 编写一个程序, 将指定目录下所有.java文件拷贝到另一个目录中,
并将扩展名改为.txt
思路:
1、用File对象封装目录
2、通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
3、遍历这个File数组,得到每一个File对象
4、判断该File对象是否是文件
a、如果是文件
b、继续判断是否以.java结尾
是:先改名后复制文件
否:不复制
*/
public class Demo07 {
public static void main(String[] args) throws IOException {
// 用File对象封装目录
File src = getDir();
// 用File对象封装目录
File dest = getDir();
// 调用复制的方法
copyFile(src, dest);
}
// 复制方法
public static void copyFile(File src, File dest) throws IOException {
// 通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
File[] subFiles = src.listFiles();
// 遍历这个File数组,得到每一个File对象
for (File subFile : subFiles) {
// 判断该File对象是否是文件
if (subFile.isFile()) {
// 如果不是以java为后缀的不复制,执行下次循环
if (!subFile.getName().endsWith(".java")) {
continue;
} else {
// 新文件File对象//复制前改名
File newDir = new File(dest, subFile.getName().replace(".java", ".txt"));
// 用高效的字节输入流封装数据源
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
// 用高效的字节输出流封装目的地
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newDir));
byte[] arr = new byte[8 * 1024];
int len;
// 判断是否读到文件结尾
while ((len = bis.read(arr)) != -1) {
// 将数据写到文件中
bos.write(arr, 0, len);
// 刷新缓存流
bos.flush();
}
// 关闭流对象
bis.close();
bos.close();
}
}
}
}
public static File getDir() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径");
while (true) {
String line = sc.nextLine();
File file = new File(line);
if (!file.exists()) {
System.out.println("您输入的路径不存在,请重新输入!");
} else if (file.isFile()) {
System.out.println("您输入的是文件的路径,请输入一个文件夹路径!");
} else {
return file;
}
sc.close();
}
}
}
package com.baidu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Demo08 {
/*
* 编写一个程序,将指定目录下所有.java文件拷贝到另一个目录中,
并将扩展名改为.txt
*/
public static void main(String[] args) throws IOException {
File src = getDir();
File dest = getDir();
copy(src, dest);
}
public static void copy(File src, File dest) throws IOException {
File newDir = new File(dest, src.getName());
newDir.mkdir();
File[] subFiles = src.listFiles();
for (File subFile : subFiles) {
if (subFile.isFile()) {
if (subFile.getName().endsWith(".java")) {
File newFile = new File(subFile, subFile.getName().replace(
".java", ".txt"));
// 用BufferedInputStream和BufferedOutputStream也可以
BufferedReader br = new BufferedReader(new FileReader(subFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(newDir, newFile.getName())));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.flush();
bw.newLine();
}
br.close();
bw.close();
}
} else {
copy(subFile, newDir);
}
}
}
public static File getDir() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入文件夹路径:");
while (true) {
String line = sc.nextLine();
File file = new File(line);
if (!file.exists()) {
System.out.println("您输入的文件夹路径不存在,请重新输入!");
} else if (file.isFile()) {
System.out.println("您输入的是一个文件路径,请重新输入!");
} else {
return file;
}
sc.close();
}
}
}
自己解决了,好高兴!!!