1、文件递归拷贝

    1. import java.io.*;
    2. public class Test {
    3. //文件目录递归拷贝
    4. public static void main(String[] args) throws Exception {
    5. String sourceFileDir = "D:\\MusicProject\\Version2.0\\music-project - 副本";
    6. String targetFileDir = "D:\\MusicProject\\Version2.0\\IO流";
    7. copy(sourceFileDir, targetFileDir);
    8. }
    9. public static void copy(String sourceFileDir, String targetFileDir) throws Exception {
    10. //创建File类抽象对象:文件和目录路径名的抽象表示形式。
    11. File fileSource = new File(sourceFileDir);
    12. //获取当前目录下面的子目录及文件
    13. File[] files = fileSource.listFiles();
    14. for (File f : files) {
    15. //获取文件名及属性
    16. System.out.println(f.getName());
    17. if (f.isFile()) {
    18. //创建文件输入流
    19. FileInputStream in = new FileInputStream(f);
    20. //创建文件输出流,对应文件名
    21. FileOutputStream out = new FileOutputStream(targetFileDir + "\\" + f.getName());
    22. //创建byte数值,用来储存读取的部分文件
    23. byte[] bytes = new byte[1024];//一次读取一kb
    24. int readLength;
    25. //读取文件,并返回读取的长度,为-1表示文件读取结束
    26. while ((readLength = in.read(bytes)) != -1) {
    27. //System.out.println(readLength);
    28. // System.out.println("............")
    29. //通过输出流写入当前文件,write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
    30. out.write(bytes, 0, readLength);
    31. }
    32. //关闭输入流
    33. in.close();
    34. //刷新输出流,清空管道
    35. out.flush();
    36. //关闭输出流
    37. out.close();
    38. } else if (f.isDirectory()) {
    39. //创建目录
    40. new File(targetFileDir + "\\" + f.getName()).mkdir();
    41. //递归
    42. copy(sourceFileDir + "\\" + f.getName(),targetFileDir + "\\" + f.getName());
    43. }
    44. }
    45. }
    46. }