11.字节流操作文件夹

//使用字节流访问一个路径下的文件夹,遍历复制含有java文件的文件夹

package com.itheima_02;

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;

public class Test02_2 {

public static void main(String[] args) throws IOException {

// File src = getDir();

// File dest = getDir();

//源目录

File src = new File("D:\\workspace");

//目标目录

File dest = new File("d:\\copy");

copy(src, dest);

}

private static void copy(File src, File dest) throws IOException {

// 获取源文件夹中的所有内容(子文件夹和文件)

File[] listFiles = src.listFiles();

// 判断File数组是否为空(因为系统有些隐藏文件不能被直接访问)

if(listFiles != null){

// 遍历File数组

for (File subFile : listFiles) { // subFile表示 这个数组中(源文件)的 子文件夹和文件

if(subFile.isFile() && subFile.getName().endsWith(".java")){ // 判断这个File是否为文件并且是否以.java为后缀名结尾

// 使用IO流拷贝文件

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(dest, subFile.getName())));

byte[] buf = new byte[1024];

int len;

while((len = bis.read(buf)) != -1){

bos.write(buf, 0, len);

}

bos.close();

bis.close();

} else if(subFile.isDirectory()){

// 由于subFile是代表源文件夹中的子文件夹,而目的地中并没有这个目录(即subFile), 所以需要现在目标文件夹中创建 这个目录

// 为啥非要在目的地中创建subFile文件夹呢? 因为,subFile文件夹中有可能有文件,而这个subFile里边的文件必须得拷贝目标文件夹中的subFile这个目录中,所以需要在目的地中创建这个subFile目录

// 若要创建文件夹,必须通过File对象

if(compare(subFile)){ // D:\\workspace\\abc

File newDir = new File(dest, subFile.getName());

if(!newDir.exists())

newDir.mkdir();

// 递归调用此方法

copy(subFile, newDir);

}

}

}

}

}

/*

* 要确定是否在目标文件夹中创建这个目录,只需要明确传递过来的文件夹中,是否有包含.java文件

* 举例:

* 判断  D:\\workspace文件夹中是否有以.java结尾的文件

* 只要D:\\workspace文件夹中当前目录有.java文件或者D:\\workspace目录的子文件夹中有.java文件,都称之为D:\\workspace文件夹中有.java文件

*/

private static boolean compare(File dir) { // D:\\workspace\\abc

// D:\\workspace\\abc\\exam0425

//  aa

//cc

//  bb

//dd

File[] listFiles = dir.listFiles(); // listFiles代表当前路径下的所有文件和文件夹

if(listFiles != null){

for (File subFile : listFiles) { // D:\\workspace\\abc\\exam0425  D:\\workspace\\abc\\RemoteSystemsTempFiles

if(subFile.isFile() && subFile.getName().endsWith(".java")){

return true;

} else if(subFile.isDirectory()){ // D:\\workspace\\abc\\exam0425

boolean flag = compare(subFile);

if(flag == false){

continue;

} else{

return flag;

}

}

}

}

return false;

}

// 键盘录入文件夹路径

private static File getDir() {

Scanner sc = new Scanner(System.in);

while(true){

System.out.println("请输入一个文件夹路径字符串:");

String line = sc.nextLine();

// 将字符串转换成File对象,因为只有File对象,才能判断这个字符串路径是否为文件夹路径。

File dir = new File(line);

// 判断这个File是否是文件夹路径

if(dir.isDirectory()){

return dir;

} else{

System.out.println("你录入的路径有误,请重新录入:");

}

/*if(dir.isDirectory()){

return dir;

} else if(dir.isFile()){

System.out.println("你录入的是文件路径,请重新录入");

} else{

System.out.println("你录入的路径有误,请重新录入:");

}*/

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,801评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,852评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,250评论 18 399
  • File类 File类用来操作文件路径或文件夹路径 绝对路径从根目录开始 相对路径在eclipse中代表当前项目根...
    JerichoPH阅读 3,624评论 0 3
  • 對《喜劇之王》尹天仇的欣賞,對《美人魚》的部分見解,對周星馳情懷的感嘆。時過境遷,願你依舊是你。 終於走進了電影院...
    牛魔王的小号阅读 3,308评论 2 1

友情链接更多精彩内容