使用Java在两个Google云存储桶之间复制

使用Java在两个Google云存储桶之间复制,java,google-cloud-platform,google-cloud-storage,Java,Google Cloud Platform,Google Cloud Storage,要在两个Google云存储桶之间进行复制,需要Java SDK中的以下命令 gsutil cp gs://bucket-name/filename gs://bucket-name 我有两个选择来使用下面的一个。专家们,你能建议是否有更好的方法吗 Java.lang.Runtime.exec() Java.lang.ProcessBuilder 如中所述,您可以使用Java客户端库在存储桶之间复制对象,作为命令的直接替代 gsutil cp gs://SOURCE\u BUCKET\u N

要在两个Google云存储桶之间进行复制,需要Java SDK中的以下命令

gsutil cp gs://bucket-name/filename gs://bucket-name
我有两个选择来使用下面的一个。专家们,你能建议是否有更好的方法吗

  • Java.lang.Runtime.exec()

  • Java.lang.ProcessBuilder

  • 如中所述,您可以使用Java客户端库在存储桶之间复制对象,作为命令的直接替代

    gsutil cp gs://SOURCE\u BUCKET\u NAME/SOURCE\u OBJECT\u NAME gs://DESTINATION\u BUCKET\u NAME/NAME\u OF\u COPY
    
    这是示例代码,您可以从中查看并下载完整的示例项目,请查看以了解哪些依赖项是必需的

    import com.google.cloud.storage.Blob;
    导入com.google.cloud.storage.storage;
    导入com.google.cloud.storage.StorageOptions;
    公共类CopyObject{
    公共静态void copyObject(
    字符串projectId、字符串sourceBucketName、字符串objectName、字符串targetBucketName){
    //GCP项目的ID
    //String projectId=“您的项目id”;
    //原始对象所在的存储桶的ID
    //字符串sourceBucketName=“您的源bucket”;
    //要复制的GCS对象的ID
    //String objectName=“您的对象名”;
    //要将对象复制到的存储桶的ID
    //字符串targetBucketName=“目标对象存储桶”
    Storage Storage=StorageOptions.newBuilder().setProjectId(projectId.build().getService();
    Blob Blob=storage.get(sourceBucketName,objectName);
    //这将保留原始名称,您也可以这样做
    //copyTo(targetBucketName,“目标对象名称”)更改名称
    blob.copyTo(targetBucketName);
    System.out.println(
    “复制的对象”
    +对象名
    +“从桶中”
    +sourceBucketName
    +“到”
    +targetBucketName);
    }
    }
    
    如果1)希望存储桶中的blob(文件)名称保持不变 2)您需要复制多个(>100)文件。最好的方法是使用传输作业

    这项工作是由谷歌用自己的设备完成的,将文件一个一个地从一个存储桶复制到另一个存储桶要快得多,因为它们可以与底层存储进行通信


    看看Google提供的和。

    您可以使用GCS Java API。上面的gsutil命令是否有完全相同的命令?