Java怎么重命名?Amazon?S3?中的文件和文件夾
一、概述
在本博文中,我們將探討 如何使用 Java 重命名 Amazon S3 存儲(chǔ)桶中的對(duì)象(文件或文件夾)。
Amazon Simple Storage Service (Amazon S3)是一種流行的云存儲(chǔ)服務(wù)。它允許用戶在云中存儲(chǔ)和檢索具有高持久性、可用性和可擴(kuò)展性的數(shù)據(jù)。我們將在接下來的章節(jié)中使用適用于 Java 的 AWS 開發(fā)工具包與其進(jìn)行交互。
二、前提條件
要重命名 S3 存儲(chǔ)桶中的對(duì)象,我們可以利用 AWS SDK for Java 提供的S3Client類。
2.1 配置 Maven 依賴項(xiàng)
首先,我們需要 在項(xiàng)目的pom.xml
中聲明 AWS S3 SDK 依賴項(xiàng):
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.20.123</version> </dependency>
2.2 配置 AWS 憑證
我們還需要設(shè)置一個(gè) AWS 賬戶,安裝 AWS CLI ,并使用我們的 AWS 憑證(AWS_ACCESS_KEY_ID
和AWS_SECERET_ACCESS_KEY
)對(duì)其進(jìn)行配置,以便能夠以編程方式訪問 AWS 資源。我們可以在 AWS 文檔中找到完成此操作的所有步驟 。
我們使用構(gòu)建器設(shè)計(jì)模式創(chuàng)建客戶端。這是一個(gè)創(chuàng)建設(shè)計(jì)模式(關(guān)于設(shè)計(jì)模式后續(xù)可能會(huì)更新博文,這里挖個(gè)坑先),它將幫助我們創(chuàng)建這些復(fù)雜的對(duì)象。在我們的示例中,我們將在US_EAST_1區(qū)域創(chuàng)建存儲(chǔ)桶。如果我們想要更改我們的首選區(qū)域,我們可以在官方文檔(點(diǎn)擊這里)中找到所有區(qū)域。
三、使用復(fù)制和刪除重命名對(duì)象
目前,使用 SDK 重命名對(duì)象的唯一方法是復(fù)制具有不同名稱的對(duì)象,然后刪除原始對(duì)象。我們還將在本節(jié)中舉例說明這一點(diǎn),解釋每個(gè)步驟。
3.1 復(fù)制 S3 對(duì)象
在此步驟中,我們將使用上一點(diǎn)中創(chuàng)建的客戶端來調(diào)用 AWS API。
首先,我們將為請(qǐng)求定義參數(shù)。假設(shè)我們有一個(gè)名為baeldung-s3-bucket
的存儲(chǔ)桶和一個(gè)名為simpleCSVFile.csv
的 CSV 文件。我們想要將文件重命名為renamedFile.csv
。讓我們首先概述復(fù)制請(qǐng)求的參數(shù):
String bucketName = "baeldung-s3-bucket"; String keyName = "simpleCSVFile.csv"; String destinationKeyName = "renamedFile.csv";
定義參數(shù)后,我們可以構(gòu)造將發(fā)送到 AWS API 的CopyObjectRequest:
CopyObjectRequest copyObjRequest = CopyObjectRequest.builder() .sourceBucket(bucketName) .sourceKey(keyName) .destinationBucket(destinationKeyName) .destinationKey(bucketName) .build();
現(xiàn)在我們可以使用AmazonS3客戶端和請(qǐng)求復(fù)制對(duì)象 :
s3Client.copyObject(copyRequest);
如果我們在此停止并運(yùn)行代碼,我們將看到現(xiàn)在有兩個(gè)文件,一個(gè)具有新的所需名稱,另一個(gè)具有原始名稱。
3.2 刪除 S3 對(duì)象
我們還需要在復(fù)制后刪除原始對(duì)象以完成重命名過程。我們將使用上一點(diǎn)中的參數(shù)定義 DeleteObjectRequest:
DeleteObjectRequest deleteRequest = DeleteObjectRequest.builder() .bucket(bucketName) .key(keyName) .build();
我們將再次調(diào)用 S3 客戶端來刪除原始對(duì)象:
s3Client.deleteObject(deleteRequest);
四、重命名文件夾
上一點(diǎn)的方法僅適用于重命名簡單對(duì)象。但是當(dāng)我們必須重命名文件夾時(shí),情況就會(huì)發(fā)生一些變化。重命名 Amazon S3 中的整個(gè)文件夾涉及迭代該文件夾中的所有對(duì)象并單獨(dú)重命名每個(gè)對(duì)象。
4.1 列出源文件夾中的所有對(duì)象
讓我們首先列出給定文件夾中的所有對(duì)象:
ListObjectsV2Request listRequest = ListObjectsV2Request.builder() .bucket(bucketName) .prefix(sourceFolderKey) .build(); ListObjectsV2Response listResponse = s3Client.listObjectsV2(listRequest); List<S3Object> objects = listResponse.contents();
我們使用存儲(chǔ)桶名稱和前綴初始化 ListObjectsV2Request 。文件夾中的對(duì)象實(shí)際上是所有以各自文件夾名稱為鍵前綴的對(duì)象。
4.2 重命名文件夾中的所有對(duì)象鍵
現(xiàn)在我們有了列出文件夾中所有對(duì)象的代碼,我們所要做的就是將它們?nèi)繌?fù)制到新目標(biāo)并刪除原始對(duì)象:
for (S3Object s3Object : objects) { String newKey = destinationFolderKey + s3Object.key().substring(sourceFolderKey.length()); // Copy object to destination folder CopyObjectRequest copyRequest = CopyObjectRequest.builder() .sourceBucket(bucketName) .sourceKey(s3Object.key()) .destinationBucket(bucketName) .destinationKey(newKey) .build(); s3Client.copyObject(copyRequest); // Delete object from source folder DeleteObjectRequest deleteRequest = DeleteObjectRequest.builder() .bucket(bucketName) .key(s3Object.key()) .build(); s3Client.deleteObject(deleteRequest); }
我們首先遍歷對(duì)象列表,對(duì)于每一項(xiàng),我們將通過用所需的新名稱替換文件夾的舊名稱來生成一個(gè)新密鑰。獲得新密鑰后,我們所要做的就是將對(duì)象復(fù)制到新目的地并刪除原始對(duì)象。
文末總結(jié)
在本文中,我們探討了使用適用于 Java 的 AWS 開發(fā)工具包重命名 S3 存儲(chǔ)桶中的文件和文件夾的方法。我們探索了兩種不同的情況,它們使用相同的概念來重命名對(duì)象,用新名稱復(fù)制它們并刪除原始名稱。希望對(duì)你有所幫助。
到此這篇關(guān)于Java重命名 Amazon S3 中的文件和文件夾的文章就介紹到這了,更多相關(guān)java 重命名 Amazon S3內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java文件處理之使用XWPFDocument導(dǎo)出Word文檔
最近因項(xiàng)目開發(fā)的需要,整理了一份用JAVA導(dǎo)出WORD文檔,下面這篇文章主要給大家介紹了關(guān)于Java文件處理之使用XWPFDocument導(dǎo)出Word文檔的相關(guān)資料,需要的朋友可以參考下2023-12-12解決MyEclipse中的Building workspace問題的三個(gè)方法
這篇文章主要介紹了解決MyEclipse中的Building workspace問題的三個(gè)方法,需要的朋友可以參考下2015-11-11RocketMQ?NameServer架構(gòu)設(shè)計(jì)啟動(dòng)流程
這篇文章主要為大家介紹了RocketMQ?NameServer架構(gòu)設(shè)計(jì)啟動(dòng)流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Maven基礎(chǔ)之如何修改本地倉庫的默認(rèn)路徑
這篇文章主要介紹了Maven基礎(chǔ)之如何修改本地倉庫的默認(rèn)路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05SpringBoot如何實(shí)現(xiàn)一個(gè)實(shí)時(shí)更新的進(jìn)度條的示例代碼
本文詳細(xì)的介紹了SpringBoot如何實(shí)現(xiàn)一個(gè)實(shí)時(shí)更新的進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05