Loading...

# 文件拷贝

方法:对源文件的目录进行遍历,对目标文件指定的相对路径下进行创建。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
    public static void main(String[] args) {
        // 源路径
        String sourcePath = "D:\\sourceFile";
        // 目标路径
        String targetPath = "D:\\targetFile";
        File sourceFile = new File(sourcePath);
        File targetFile = new File(targetPath);
        // 拷贝
        copy(sourceFile, targetFile);
    }
    private static void copy(File sourceFile, File targetFile) {
        // 如果是文件,则进行拷贝
        if (sourceFile.isFile()){
            copyFile(sourceFile, targetFile);
            return;
        }
        // 如果是目录,遍历目录
        File[] files = sourceFile.listFiles();
        for (File file : files){
            File newFile = targetFile;
            // 如果文件是目录的话
            if (file.isDirectory()){
                // 新建对应目录
                String folderName = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("\\") + 1);
                String newPath = targetFile.getAbsolutePath() + "\\" + folderName;
                // 目录文件目录
                newFile = new File(newPath);
                // 如果不存在,则新建目录
                if (!newFile.exists()){
                    newFile.mkdirs();
                }
            }
            // 拷贝
            copy(file, newFile);
        }
    }
    private static void copyFile(File sourceFile, File targetFile) {
        // 输入输出流
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;
        try {
            // 文件流
            inputStream = new FileInputStream(sourceFile);
            // 文件名称
            String fileName = sourceFile.getAbsolutePath().substring(sourceFile.getAbsolutePath().lastIndexOf("\\") + 1);
            String targetFilePath = targetFile.getAbsolutePath() + "\\" + fileName;
            // 输出
            outputStream = new FileOutputStream(targetFilePath);
            // 每次赋值 1Mb
            byte[] bytes = new byte[1024 * 1024];
    		// 边读边写
            int count;
            while ((count = inputStream.read(bytes)) != -1){
                outputStream.write(bytes, 0, count);
            }
            outputStream.flush();
        } catch (Exception e){
            e.printStackTrace();
        }finally {
            // 关闭输入输出流
            if (inputStream != null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (outputStream != null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

还可在拷贝的文件末尾写入自定义内容。

列如,想在每个新拷贝文件中的末尾加入作者名和时间等。

private static void copyFile(File sourceFile, File targetFile) {
  
    // 已省略......
    // 边读边写
    int count;
    while ((count = inputStream.read(bytes)) != -1){
        outputStream.write(bytes, 0, count);
    }
    // 可在文件末尾写入自定义内容
    writeEnd(sourceFile, outputStream);
    outputStream.flush();
    
    // 已省略......
}
private static void writeEnd(File sourceFile, FileOutputStream outputStream) throws IOException {
    // 作者名
    String author = "qiyin";
    // 获取文件的创建时间(参考下一章内容)
    LocalDateTime createTime = FileDate.getFileCreateTime(sourceFile);
    // 写入的内容
    String content = "\n作者: " + author + "\n创建时间:" + DateTimeFormatter.ofPattern("yyyy-MM-dd").format(createTime);
    outputStream.write(content.getBytes());
}

# 获取文件时间

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
public class FileDate {
    public static void main(String[] args) {
        // 文件路径
        String filePath = "D:\\targetFile\\新建文本文档.txt";
        File file = new File(filePath);
        // 获取文件的创建时间
        LocalDateTime fileCreateTime = getFileCreateTime(file);
        System.out.println(fileCreateTime);
    }
    private static LocalDateTime getFileCreateTime(File file) {
        // 获取文件的 Path
        Path path = file.toPath();
        try {
            // 根据 Path 获取文件的基本属性
            BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class);
            // 获取文件的创建时间
            FileTime fileTime = attributes.creationTime();
            // 时间转化
            LocalDateTime localDateTime = fileTime.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
            return localDateTime;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return LocalDateTime.now();
    }
}
更新于

请我喝[茶]~( ̄▽ ̄)~*

七音 微信支付

微信支付

七音 支付宝

支付宝