通过File类操作文件夹最主要的方法就是通过递归实现循环,再加上文件IO流的读取对文件内容进行操作
1 从键盘输入接收文件夹路径,打印出该文件夹下所有的以 .java 为结尾的文件名
/***
* 从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
*/
public class ShowFile {
public static void main(String[] args) {
//从键盘获取路径
File dir = getDir();
System.out.println(dir);
//输出路径
showFile(dir);
}
private static void showFile(File dir) {
int index = 0;
File[] files = dir.listFiles();
for (File f : files) {
if (f.isFile() && f.getName().endsWith(".java")) {
index += f.length();
System.out.println(f.getAbsolutePath());
}else if (f.isDirectory()){
//传入的是一个目录
showFile(f);
}
}
//接收文件夹路径并统计该文件夹的长度
System.out.println("length=>" + index);
}
//从键盘获取一个有效的目录
private static File getDir() {
Scanner sc = new Scanner(System.in);
System.out.println("输入");
String path;
while (true) {
//获取路径
path = sc.nextLine();
File dir = new File(path);
if (dir.exists() == false) {
//路径不存在
System.out.println("路径不存在");
}else if (dir.isFile()) {
//普通文件
System.out.println("输入的是文件,不是文件名");
}else {
return dir;
}
}
}
}
2 复制一个文件夹下的所有文件到另一个文件夹下
/***
* 复制任意文件夹下面所有文件和子文件夹内容到D:/test。
* 提示:涉及单个文件复制、目录的创建、递归的使用
*/
public class TestWork5 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
String path = sc.nextLine();
copyDirectory(path, "D:\test");
}
//复制目录的方法
public static void copyDirectory( String sourceDirectory, String targetDirectory) throws IOException {
//创建文件对象
File sourceFile = new File(sourceDirectory);
File targetFile = new File(targetDirectory);
//判断源目录
if(!sourceFile.exists() || !sourceFile.isDirectory()) {
System.out.println("源目录不存在!!");
return ;
}
//判断目标目录,若不存在,则手动创建
if(!targetFile.exists()) {
targetFile.mkdirs();
}
//获取源目录的所有文件和目录
File[] sourceList = sourceFile.listFiles();
System.out.println(sourceList.length);
//遍历源目录
for (File f : sourceList) {
if(f.isFile()) {
//源文件
File sourceF = f;
//目标文件 父路径 + 子路径
File targetF = new File(targetFile,f.getName());
//调用复制文件的方法
copyFiles(sourceF, targetF);
}
//若为目录
if(f.isDirectory()) {
//源目录
String sourceD = sourceDirectory + File.separator + f.getName();
System.out.println("sourceD: " + sourceD);
//目标目录
String targetD = targetDirectory + File.separator + f.getName();
System.out.println("targetD: " + targetD);
//递归调用复制目录的方法
copyDirectory(sourceD, targetD);
}
}
}
//复制文件的方法
public static void copyFiles(File sourceFile, File targetFile) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(sourceFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(targetFile));
//用字节流可能会出现数组越界的情况
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
bw.flush();
br.close();
bw.close();
}
}