美文网首页
11.字节流操作文件夹

11.字节流操作文件夹

作者: 木有鱼丸啦 | 来源:发表于2017-11-04 22:37 被阅读0次

    //使用字节流访问一个路径下的文件夹,遍历复制含有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("你录入的路径有误,请重新录入:");

    }*/

    }

    }

    }

    相关文章

      网友评论

          本文标题:11.字节流操作文件夹

          本文链接:https://www.haomeiwen.com/subject/biiqmxtx.html