Java調(diào)用Oss JDk實(shí)現(xiàn)刪除指定目錄下的所有文件
1、引入依賴
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.16.1</version>
</dependency>
2、方法
/**
* 刪除指定前綴或目錄下的多個(gè)文件
*
* @param prefix 刪除目錄
*/
public void deletePathFileList(String prefix) {
OSS ossClient = null;
try {
//封裝創(chuàng)建Oss實(shí)例
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(access_key, secret_key);
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
ossClient = OSSClientBuilder.create().endpoint(endpoint).credentialsProvider(credentialsProvider).clientConfiguration(clientBuilderConfiguration).region(region).build();
// 列舉所有包含指定前綴的文件并刪除。
String nextMarker = null;
ObjectListing objectListing;
do {
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucket).withPrefix(prefix).withMarker(nextMarker);
objectListing = ossClient.listObjects(listObjectsRequest);
if (!objectListing.getObjectSummaries().isEmpty()) {
List<String> keys = new ArrayList<>();
for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
keys.add(s.getKey());
}
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket).withKeys(keys).withEncodingType("url");
DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest);
List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
for (String obj : deletedObjects) {
String deleteObj = URLDecoder.decode(obj, "UTF-8");
System.out.println(deleteObj);
}
}
nextMarker = objectListing.getNextMarker();
} while (objectListing.isTruncated());
} catch (Exception e) {
log.error("阿里云刪除指定前綴或目錄下的多個(gè)文件異常:{}", e.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}3、方法補(bǔ)充
下面小編為大家整理了Java刪除文件的所有方法,有需要的可以參考下
1.使用FileUtils類(lèi)
來(lái)自 Apache Commons IO的FileUtils類(lèi)提供了幾個(gè)方便的文件操作實(shí)用程序。您可以使用該FileUtils.cleanDirectory()方法遞歸刪除目錄中的所有文件和子目錄,而不刪除目錄本身。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
FileUtils.cleanDirectory(directory);
}
}
要遞歸刪除目錄及其中的所有內(nèi)容,您可以使用該FileUtils.deleteDirectory()方法。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
FileUtils.deleteDirectory(directory);
}
}
或者,您可以使用該FileUtils.forceDelete()方法刪除一個(gè)目錄和所有子目錄。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
FileUtils.forceDelete(directory);
}
}
2.使用File.delete()方法
該File.delete()方法刪除由指定路徑名表示的文件或目錄。有許多方法可以有條件地刪除使用它的目錄中的文件和子目錄。
例如,以下解決方案僅刪除主目錄中的文件,所有子目錄保持不變。
import java.io.File;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
File directory = new File("/path/to/dir");
for (File file: Objects.requireNonNull(directory.listFiles())) {
if (!file.isDirectory()) {
file.delete();
}
}
}
}
如果您使用 Java 8 或更高版本,則可以使用:
import java.io.File;
import java.util.Arrays;
import java.util.Objects;
import java.util.function.Predicate;
public class Main {
public static void deleteDirectory(File directory) {
Arrays.stream(Objects.requireNonNull(directory.listFiles()))
.filter(Predicate.not(File::isDirectory))
.forEach(File::delete);
}
public static void main(String[] args) {
File directory = new File("/path/to/dir");
deleteDirectory(directory);
}
}
您可以輕松擴(kuò)展解決方案以遞歸刪除目錄中的所有文件和子目錄。請(qǐng)注意,F(xiàn)ile.delete()當(dāng)且僅當(dāng)目錄為空時(shí),您可以使用該方法刪除目錄。
import java.io.File;
import java.util.Objects;
public class Main {
public static void deleteDirectory(File directory) {
for (File file: Objects.requireNonNull(directory.listFiles())) {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
file.delete();
}
}
}
public static void main(String[] args) {
File directory = new File("/path/to/dir");
deleteDirectory(directory);
}
}
這是使用 Stream API 的版本。它利用該Files.walk()方法并刪除目錄中的所有文件和子目錄以及目錄本身。
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;
public class Main {
public static void deleteDirectory(Path directory) throws IOException {
Files.walk(directory)
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::delete);
}
public static void main(String[] args) throws IOException {
Path directory = Path.of("/path/to/dir");
deleteDirectory(directory);
}
}
如果您需要從目錄及其所有子目錄中刪除“僅文件”,您可以執(zhí)行以下操作:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class Main {
public static void deleteDirectory(File directory) throws IOException {
Files.walk(directory.toPath())
.filter(Files::isRegularFile)
.map(Path::toFile)
.forEach(File::delete);
}
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
deleteDirectory(directory);
}
}
到此這篇關(guān)于Java調(diào)用Oss JDk實(shí)現(xiàn)刪除指定目錄下的所有文件的文章就介紹到這了,更多相關(guān)Java刪除指定目錄下文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis-Plus動(dòng)態(tài)表名使用selectPage方法不生效問(wèn)題解析與解決方案
MyBatis-Plus是MyBatis的增強(qiáng)工具,動(dòng)態(tài)表名是MyBatis-Plus的一個(gè)重要功能之一,一些開(kāi)發(fā)者在使用selectPage方法時(shí)可能會(huì)遇到動(dòng)態(tài)表名不生效的問(wèn)題,本文將深入分析這個(gè)問(wèn)題的原因,并提供相應(yīng)的解決方案,需要的朋友可以參考下2023-12-12
詳解如何開(kāi)發(fā)一個(gè)MyBatis通用Mapper的輪子
因?yàn)橐恍┰?,例如:通用?shù)據(jù)權(quán)限控制、MyBatis-Plus好像不支持聯(lián)合主鍵等,我們不得不開(kāi)發(fā)一個(gè)MyBatis通用Mapper的輪子。文中的示例代碼講解詳細(xì),需要的可以參考一下2022-12-12
java利用遞歸實(shí)現(xiàn)類(lèi)別樹(shù)示例代碼
這篇文章主要給大家介紹了關(guān)于java利用遞歸實(shí)現(xiàn)類(lèi)別樹(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
CCF考試試題之門(mén)禁系統(tǒng)java解題代碼
這篇文章主要為大家詳細(xì)介紹了CCF考試試題之門(mén)禁系統(tǒng)java解題代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Springboot之idea之pom文件圖標(biāo)不對(duì)問(wèn)題
這篇文章主要介紹了Springboot之idea之pom文件圖標(biāo)不對(duì)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Kotlin + Retrofit + RxJava簡(jiǎn)單封裝使用詳解
這篇文章主要介紹了Kotlin + Retrofit + RxJava簡(jiǎn)單封裝使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
SpringMVC中@Valid不起效BindingResult讀取不到Error信息
在寫(xiě)SpringMVC項(xiàng)目時(shí),由于要對(duì)表單數(shù)據(jù)進(jìn)行校驗(yàn),需要使用@Valid進(jìn)行校驗(yàn),但是在進(jìn)行數(shù)據(jù)校驗(yàn)時(shí),BindingResult對(duì)象無(wú)法攔截非法表單數(shù)據(jù),result.hasErrors()無(wú)論怎么輸入都會(huì)返回false,本文詳細(xì)的介紹一下解決方法2021-09-09

