当前位置:首页 > Java

java如何拷贝照片

2026-03-23 07:56:27Java

使用 Files.copy 方法(Java NIO)

Java NIO 的 Files.copy 方法提供了一种简单高效的文件拷贝方式,适用于照片或其他二进制文件。以下是示例代码:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;

public class PhotoCopy {
    public static void main(String[] args) {
        Path source = Paths.get("source.jpg");
        Path target = Paths.get("target.jpg");

        try {
            Files.copy(source, target);
            System.out.println("照片拷贝成功");
        } catch (IOException e) {
            System.err.println("拷贝失败: " + e.getMessage());
        }
    }
}

使用 FileInputStreamFileOutputStream

传统的 IO 流方式适用于所有 Java 版本,通过逐字节或缓冲区读写实现拷贝:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class PhotoCopyTraditional {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("source.jpg");
             FileOutputStream fos = new FileOutputStream("target.jpg")) {

            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                fos.write(buffer, 0, length);
            }
            System.out.println("照片拷贝完成");
        } catch (IOException e) {
            System.err.println("错误: " + e.getMessage());
        }
    }
}

使用 BufferedInputStream 提升性能

通过缓冲流减少直接 IO 操作次数,显著提升大文件拷贝效率:

import java.io.*;
import java.nio.file.*;

public class BufferedPhotoCopy {
    public static void main(String[] args) {
        Path sourcePath = Paths.get("source.jpg");
        Path targetPath = Paths.get("target.jpg");

        try (InputStream is = new BufferedInputStream(Files.newInputStream(sourcePath));
             OutputStream os = new BufferedOutputStream(Files.newOutputStream(targetPath))) {

            byte[] buffer = new byte[8192];
            int bytesRead;
            while ((bytesRead = is.read(buffer)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 Apache Commons IO 库

第三方库 FileUtils 提供单行代码实现文件拷贝,适合快速开发:

java如何拷贝照片

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;

public class PhotoCopyCommons {
    public static void main(String[] args) {
        try {
            FileUtils.copyFile(
                new File("source.jpg"), 
                new File("target.jpg")
            );
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 目标文件存在时,NIO 的 Files.copy 会抛出 FileAlreadyExistsException,需通过 StandardCopyOption.REPLACE_EXISTING 参数覆盖
  • 大文件建议使用缓冲区(如 8KB 以上)减少 IO 操作次数
  • 流操作务必使用 try-with-resources 确保资源释放
  • 检查源文件是否存在(Files.exists(sourcePath))可避免异常

标签: 照片java
分享给朋友:

相关文章

如何删除java

如何删除java

卸载 Java 的步骤 Windows 系统: 打开控制面板,选择“程序和功能”或“卸载程序”,在列表中找到 Java 相关条目(如“Java Runtime Environment”或“Java D…

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…

java如何导包

java如何导包

导入包的方法 在Java中,导入包(package)可以通过import语句实现,用于引入其他类或包中的功能。以下是几种常见的导包方式: 导入单个类 import java.util.ArrayL…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…