文件的常用操作(读取压缩文件、解压、删除)

编程入门 行业动态 更新时间:2024-10-09 10:22:56

文件的常用操作(读取<a href=https://www.elefans.com/category/jswz/34/1758321.html style=压缩文件、解压、删除)"/>

文件的常用操作(读取压缩文件、解压、删除)

背景:最近做一个腾讯 cos 桶 文件的读写与本地数据库查询等操作
Retrofit 中文件下载的可以添加 @Streaming

    @Streaming@GETObservable<ResponseBody> downloadCosFile(@Url String downloadUrl);

@Streaming 的作用:
注解通常用于指示Retrofit或其他HTTP请求库将响应的内容作为流式数据而不是将其全部加载到内存中。这对于处理大文件或流式传输非常有用,因为它可以减少内存占用并提高性能。

HttpCenter.getInstance().requestResponse(HttpCenter.getInstance().getApi().downloadCosFile(fileDownloadPath), new HttpObserver<ResponseBody>(ApiService.GET_COS_FILE_INFO) {@Overrideprotected void onFailure(ApiException e) {NLog.i(TAG, "onFailure:  cos 文件 请求失败" + e.getMessage());callBack.onResult(null);}@Overrideprotected void onSuccess(ResponseBody responseBody) {NLog.i(TAG, "onSuccess:  cos 文件 请求成功");// 下载文件AppExecutors.autoExecute(() -> {// 读入请求体的输入流InputStream inputStream = responseBody.byteStream();// 指定文件全路径-》 引申获取Android 几种路径的方式String zipFilePath = "fileObsolutePath" File outputFile = new File(zipFilePath); // 保存到应用的私有目录try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {byte[] buffer = new byte[4 * 1024];int read;while ((read = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, read);}outputStream.flush();NLog.i(TAG, "onSuccess: 文件写入成功");String unZipFileDir;ZipUtils.UnZipFolder(outputFile.getAbsolutePath(), unZipFileDir, unZipPathList -> {if (unZipPathList != null && unZipPathList.size() > 0) {// 每个压缩文件下只有一个文件,所以直接取第一个解压文件路径NLog.i(TAG, "onSuccess: 解压成功 " + unZipPathList.get(0));callBack.onResult(unZipPathList.get(0));} else {callBack.onResult(null);}});// 删除所有解析数据deleteDirectory(FileUtil.getSecondFolder(DOWNLOAD_COS_DIR));} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}});}
}

ZipUtils.java 解压文件

public static void UnZipFolder(String zipFileString, String outPathString, ICommListener<List<String>> iCommListener) throws IOException {ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));ZipEntry zipEntry;String szName = "";List<String> unZipPathList = new ArrayList<>();while ((zipEntry = inZip.getNextEntry()) != null) {szName = zipEntry.getName();NLog.i(TAG, "UnZipFolder: zipEntry " + szName);if (zipEntry.isDirectory()) {NLog.i(TAG, "UnZipFolder: 解压目录 ");//获取部件的文件夹名szName = szName.substring(0, szName.length() - 1);File folder = new File(outPathString + File.separator + szName);folder.mkdirs();} else {NLog.i(TAG, "UnZipFolder: 解压文件 ");String unZipPath = outPathString + File.separator + szName;File file = new File(unZipPath);if (!file.exists()) {file.getParentFile().mkdirs();file.createNewFile();}// 获取文件的输出流FileOutputStream out = new FileOutputStream(file);int len;byte[] buffer = new byte[1024];// 读取(字节)字节到缓冲区while ((len = inZip.read(buffer)) != -1) {// 从缓冲区(0)位置写入(字节)字节out.write(buffer, 0, len);out.flush();}out.close();unZipPathList.add(unZipPath);NLog.i(TAG, "UnZipFolder: 解压文件写入完成 ");}}inZip.close();iCommListener.onResult(unZipPathList);NLog.i(TAG, "UnZipFolder: 解压结束");}

删除目录

 public static boolean deleteDir(final File dir) {if (dir == null) return false;// dir doesn't exist then return trueif (!dir.exists()) return true;// dir isn't a directory then return falseFile[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (file.isFile()) {if (!file.delete()) return false;} else if (file.isDirectory()) {if (!deleteDir(file)) return false;}}}return dir.delete();}

更多推荐

文件的常用操作(读取压缩文件、解压、删除)

本文发布于:2023-12-03 11:47:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1655002.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:压缩文件   常用   操作   文件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!