• IO复制多级目录 控制台输入文件目录然后把目录下java文件复制到 D: 并统计java个数


    1. package cn.itcast_05;  
    2.   
    3. import java.io.BufferedInputStream;  
    4. import java.io.BufferedOutputStream;  
    5. import java.io.File;  
    6. import java.io.FileInputStream;  
    7. import java.io.FileOutputStream;  
    8. import java.io.IOException;  
    9.   
    10. /* 
    11.  * 需求:复制多极文件夹 
    12.  *  
    13.  * 数据源:G:Javademos 
    14.  * 目的地:G:\ 
    15.  *  
    16.  * 分析: 
    17.  *      A:封装数据源File 
    18.  *      B:封装目的地File 
    19.  *      C:判断该File是文件还是文件夹 
    20.  *          a:是文件夹 
    21.  *              就在目的地目录下创建该文件夹 
    22.  *              获取该File对象下的所有文件或者文件夹File对象 
    23.  *              遍历得到每一个File对象 
    24.  *              回到C 
    25.  *          b:是文件 
    26.  *              就复制(字节流)     
    27.  */  
    28. public class copyFolderDemo {  
    29.     public static void main(String[] args) throws IOException {  
    30.         // 封装数据源  
    31.         File srcFolder = new File("D:\a\demos");  
    32.         // 封装目的地  
    33.         File destFolder = new File("D:\");  
    34.   
    35.         // 复制文件夹功能  
    36.         copyFolder(srcFolder, destFolder);  
    37.     }  
    38.   
    39.     /** 
    40.      * 复制文件夹方法 
    41.      *  
    42.      * @param srcFolder 
    43.      *            数据源 
    44.      * @param destFolder 
    45.      *            目的地 
    46.      */  
    47.     public static void copyFolder(File srcFolder, File destFolder)  
    48.             throws IOException {  
    49.         // 判断该File是文件还是文件夹  
    50.         if (srcFolder.isDirectory()) {  
    51.             // 文件夹  
    52.             File newFolder = new File(destFolder, srcFolder.getName());    //拼接目标地址
    53.             newFolder.mkdir();  
    54.   
    55.             // 获取该File对象下的所有文件或者文件夹File对象  
    56.             File[] fileArray = srcFolder.listFiles();  
    57.             // 遍历得到每一个File对象  
    58.             for (File file : fileArray) {  
    59.                 copyFolder(file, newFolder);  
    60.             }  
    61.   
    62.         } else {  
    63.             // 文件  
    64.             File newFile = new File(destFolder, srcFolder.getName());// G:d.txt  
    65.   
    66.             // 复制文件功能  
    67.             copyFile(srcFolder, newFile);  
    68.         }  
    69.     }  
    70.   
    71.     /** 
    72.      * 复制文件方法 
    73.      *  
    74.      * @param srcFolder 
    75.      *            数据源 
    76.      * @param newFile 
    77.      *            目的地 
    78.      */  
    79.     public static void copyFile(File srcFolder, File newFile)  
    80.             throws IOException {  
    81.         // 封装数据源  
    82.         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(  
    83.                 srcFolder));  
    84.         // 封装目的地  
    85.         BufferedOutputStream bos = new BufferedOutputStream(  
    86.                 new FileOutputStream(newFile));  
    87.   
    88.         // 读写数据  
    89.         byte[] bys = new byte[1024];  
    90.         int len = 0;  
    91.         while ((len = bis.read(bys)) != -1) {  
    92.             bos.write(bys, 0, len);  
    93.             bos.flush();  
    94.         }  
    95.   
    96.         // 释放资源  
    97.         bos.close();  
    98.         bis.close();  
    99.     }  
    100. }  

    从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中,并统计java文件的个数.

    提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java,另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可.

    package cn.itcast.demo;

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Random;
    import java.util.Scanner;

    public class Test02 {
    static int count = 0;

    public static void main(String[] args) throws IOException {
    // 获得源文件夹
    File srcDir = inputFile();
    // 创建目标文件夹对象
    File destDir = new File("d:/java");
    destDir.mkdirs();
    // 拷贝Java文件
    copyJavaFile(srcDir, destDir);
    System.out.println("count = " + count);
    }

    /*
    * 将srcDir文件夹下的所有.Java文件拷贝到destDir文件夹下
    */
    public static void copyJavaFile(File srcDir, File destDir)
    throws IOException {
    // 获得源文件夹下所有的.java文件和子文件夹
    File[] files = srcDir.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
    if (pathname.isDirectory()
    || pathname.getName().endsWith(".java"))
    return true;
    return false;
    }
    });
    // 遍历文件数组
    for (File file : files) {
    // 判断file是否是文件夹
    if (file.isDirectory()) {
    // 递归调用当前方法
    copyJavaFile(file, destDir);
    } else { // 如果是文件,拷贝到目标文件夹destDir下
    // 获得要拷贝的文件名
    String fileName = file.getName();
    // 在目标文件夹destDir下创建一个同名文件名
    File destFile = new File(destDir, fileName);
    // 判断目标文件是否存在
    while (destFile.exists()) {
    // 重命名目标文件名
    destFile = new File(destDir, new Random().nextInt(100000)
    + fileName);
    }
    System.out.println(destFile);
    copyFile(file, destFile);
    }
    }
    }

    /*
    * 字节流缓冲区流读写字节数组
    */
    private static void copyFile(File srcFile, File destFile)
    throws IOException {
    // 计数器加一
    count++;
    // 创建字节缓冲输入流
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
    srcFile));
    // 创建字节缓冲输出流
    BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream(destFile));

    int len = 0;
    byte[] buffer = new byte[1024];
    // 循环读取数据
    while ((len = bis.read(buffer)) != -1) {
    // 利用输出流往输出目的写数据
    bos.write(buffer, 0, len);
    }

    // 关闭资源
    bis.close();
    bos.close();
    }

    /*
    * 根据用户输入的路径字符串创建文件对象
    */
    private static File inputFile() {
    // 创建键盘输入对象
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个文件夹路径:");
    // 接收用户输入的路径
    String filePath = sc.nextLine();
    // 根据路径字符串创建文件对象
    File dir = new File(filePath);
    if (!dir.exists())
    throw new RuntimeException("你输入的文件路径不存在!!!");
    // 判断是否是文件夹
    if (!dir.isDirectory()) {
    throw new RuntimeException("输入的路径不是文件夹路径!!!");
    }
    return dir;
    }
    }

  • 相关阅读:
    jsp中的contentType与pageEncoding的区别和作用
    HashMap实现原理及源码分析
    JAVA使用urlrewrite实现伪静态化
    java动态代理(JDK和cglib)
    Codeforces 1201D. Treasure Hunting
    Codeforces 1201C. Maximum Median
    Codeforces 1229C. Konrad and Company Evaluation
    Codeforces 1229B. Kamil and Making a Stream
    Codeforces 1229A. Marcin and Training Camp
    P1315 观光公交
  • 原文地址:https://www.cnblogs.com/shan1393/p/8964651.html
Copyright © 2020-2023  润新知