Java調(diào)用Oss JDk實現(xiàn)刪除指定目錄下的所有文件
1、引入依賴
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.16.1</version> </dependency>
2、方法
/** * 刪除指定前綴或目錄下的多個文件 * * @param prefix 刪除目錄 */ public void deletePathFileList(String prefix) { OSS ossClient = null; try { //封裝創(chuàng)建Oss實例 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("阿里云刪除指定前綴或目錄下的多個文件異常:{}", e.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } }
3、方法補充
下面小編為大家整理了Java刪除文件的所有方法,有需要的可以參考下
1.使用FileUtils類
來自 Apache Commons IO的FileUtils類提供了幾個方便的文件操作實用程序。您可以使用該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()方法刪除一個目錄和所有子目錄。
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); } }
您可以輕松擴展解決方案以遞歸刪除目錄中的所有文件和子目錄。請注意,F(xiàn)ile.delete()當(dāng)且僅當(dāng)目錄為空時,您可以使用該方法刪除目錄。
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實現(xiàn)刪除指定目錄下的所有文件的文章就介紹到這了,更多相關(guān)Java刪除指定目錄下文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JPA之EntityManager踩坑及解決:更改PersistenceContext
這篇文章主要介紹了JPA之EntityManager踩坑及解決:更改PersistenceContext方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot整合mybatis常見問題(小結(jié))
這篇文章主要介紹了SpringBoot整合mybatis常見問題(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12datax-web在windows環(huán)境idea中模塊化打包部署操作步驟
這篇文章主要介紹了datax-web在windows環(huán)境idea中模塊化打包部署操作步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05