java拷贝指定目录下所有内容到minIO

MinIO及java工具类

minIO知识及java客户端内容详情见上篇 MinIO简介及Java客户端常用操作示例 。本文主要记录 把指定目录下全部内容递归写入MinIO中。

创建 桶及文件夹

  创建桶 直接使用工具类先判断,再创建即可,创建文件夹,需要注意以“/”结尾,实际也是在minIO上创建文件,只是作为目录的表现形式展示。代码如下:

List<AITrainVOutputConfigPO> outList = versionPO.getOutputList();
        String bucketName = null;
        String trainNameVersion = null;
        if (!outList.isEmpty()) {
            bucketName = Constants.AI_TRAIN_BUCKET_NAME;
            if (!minIOUtil.bucketExists(bucketName) && !minIOUtil.makeBucket(bucketName)) {
                return AIPRet.<String>builder().success(false).message("创建桶失败!").build();
            }
            //以每个训练每个版本 创建一个文件夹 文件夹必须以 / 结尾
            trainNameVersion = versionPO.getTrainName() + "-" + versionPO.getVersionNo() + "/";
            if (!minIOUtil.listObjects(bucketName, trainNameVersion).iterator().hasNext()
                    && !minIOUtil.mkdir(bucketName, trainNameVersion)) {
                return AIPRet.<String>builder().success(false).message("创建文件夹" + trainNameVersion + "失败!").build();
            }
        }

指定目录下所有文件拷贝到MinIO

  把指定目录下所有文件及子目录及其下所有文件拷贝到MinIO上。代码如下:

调用代码:

		for (AITrainVOutputConfigPO out : outList) {
            String outUrl = out.getTrainUrl();
            if (!this.writeFilesToMinIO(outUrl, bucketName, trainNameVersion)) {
                return AIPRet.<String>builder().success(false).message("导出文件目录" + outUrl + "失败!").build();
            }
        }

writeFilesToMinIO 写入MinIO方法
注意:这里判断目录还是文件,如果是目录,进行递归调用。

/**
     *
     * @param dir 待拷贝的目录
     * @param bucketName minIO的桶名称
     * @param path minIO上的路径名称
     * @return 写到minIO是否成功
*/
private boolean writeFilesToMinIO(String dir, String bucketName, String path) {
        boolean flag = true;
        File file = Paths.get(dir).toFile();
        File[] files = file.listFiles();
        try {
            assert files != null;
            for (File f : files) {
                log.info("文件路径:" + f.getPath());
                log.info("文件名称:" + f.getName());
                if (f.isDirectory()) {
                    minIOUtil.mkdir(bucketName, path + f.getName() + "/");
                    writeFilesToMinIO(f.getPath(), bucketName, path + f.getName() + "/");
                } else {
                    try (InputStream inputStream = Files.newInputStream(f.toPath())) {
                        minIOUtil.putObject(bucketName, path + f.getName(), inputStream);
                    }
                }
            }
        } catch (Exception ex) {
            flag = false;
            log.error("写入MinIO异常", ex);
        }
        return flag;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用 Minio Java SDK 来实现下载指定文件夹下的所有文件。具体步骤如下: 1. 首先需要引入 Minio Java SDK 的依赖包,例如使用 Maven 的话,在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.10</version> </dependency> ``` 其中版本号可以替换为最新版本号。 2. 使用 Minio Java SDK 连接到 Minio 服务器,例如: ``` import io.minio.MinioClient; import io.minio.errors.MinioException; public class DownloadExample { public static void main(String[] args) { try { // 连接到 Minio 服务器 MinioClient minioClient = new MinioClient("http://localhost:9000", "minio", "minio123"); // 下载指定文件夹下的所有文件 String bucketName = "mybucket"; String folderName = "myfolder"; Iterable<Result<Item>> objects = minioClient.listObjects(bucketName, folderName, true); for (Result<Item> result : objects) { Item item = result.get(); String objectName = item.objectName(); String localFilePath = "/path/to/local/folder/" + objectName; minioClient.downloadObject(bucketName, objectName, localFilePath); } } catch (MinioException e) { System.out.println("Error occurred: " + e); } } } ``` 其中 `"http://localhost:9000"` 是 Minio 服务器的地址,`"minio"` 和 `"minio123"` 分别是 Minio 服务器的访问密钥和密钥口令。`"mybucket"` 和 `"myfolder"` 分别是要下载的文件所在的存储桶名称和文件夹路径。`"/path/to/local/folder/"` 是本地存储路径,需要根据实际情况修改。这个代码会将指定文件夹下的所有文件下载到本地存储路径中。 注意:以上代码需要处理 MinioException 异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祺稷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值