Android 常用文件操作方法

news/2025/11/22 11:21:34/文章来源:https://www.cnblogs.com/zshsboke/p/19255897

Android 常用文件操作方法

文件压缩、md5计算

package io.github.okhttplearn.ui.screenimport android.content.Context
import android.os.Environment
import android.util.Log
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import io.github.okhttplearn.ui.theme.OkhttpLearnTheme
import io.github.okhttplearn.utils.Utils
import okio.buffer
import okio.sink
import java.io.Fileprivate const val TAG: String = "WorldScreen"@Composable
internal fun WorldScreen(modifier: Modifier = Modifier,snackBarHostState: SnackbarHostState,
) {val context: Context = LocalContext.currentval srcFile: File = remember {File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "src.txt")}val destFile: File = remember {File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "dest.gz")}Column(modifier = modifier) {Text(text = "写文件", modifier = Modifier.fillMaxWidth().padding(all = 5.dp).background(color = Color(color = 0xFFF8BBD0),shape = RoundedCornerShape(size = 5.dp)).padding(all = 5.dp).clickable {Log.i(TAG, "WorldScreen -> srcFile: $srcFile")if (srcFile.parentFile?.exists() == false) {Log.i(TAG, "WorldScreen -> isSuccess: ${srcFile.parentFile?.mkdirs()}")}srcFile.sink().buffer().use { bufferedSink ->for (i in 0 until 1000) {bufferedSink.writeUtf8("Hello World: $i")}}})Text(text = "压缩zip", modifier = Modifier.fillMaxWidth().padding(all = 5.dp).background(color = Color(color = 0xFFF8BBD0),shape = RoundedCornerShape(size = 5.dp)).padding(all = 5.dp).clickable {Log.i(TAG, "WorldScreen -> srcFile: $srcFile, destFile: $destFile")Utils.compressFileToGzip2(srcFile, destFile)})Text(text = "压缩gzip", modifier = Modifier.fillMaxWidth().padding(all = 5.dp).background(color = Color(color = 0xFFF8BBD0),shape = RoundedCornerShape(size = 5.dp)).padding(all = 5.dp))Text(text = "计算md5", modifier = Modifier.fillMaxWidth().padding(all = 5.dp).background(color = Color(color = 0xFFF8BBD0),shape = RoundedCornerShape(size = 5.dp)).padding(all = 5.dp).clickable {val md5: String = Utils.getFileMd5(destFile)Log.i(TAG, "WorldScreen -> md5: $md5")})}
}@Preview(showBackground = true)
@Composable
private fun WorldScreenPreview() {OkhttpLearnTheme {val snackBarHostState: SnackbarHostState = remember { SnackbarHostState() }WorldScreen(modifier = Modifier, snackBarHostState = snackBarHostState)}
}

工具方法

package io.github.okhttplearn.utilsimport okio.BufferedSink
import okio.BufferedSource
import okio.buffer
import okio.gzip
import okio.sink
import okio.source
import java.io.BufferedInputStream
import java.io.BufferedOutputStream
import java.io.File
import java.io.InputStream
import java.security.MessageDigest
import java.util.zip.GZIPOutputStreamprivate const val TAG: String = "Utils"internal object Utils {internal fun compressFileToGzip1(sourceFile: File, targetFile: File) {targetFile.outputStream().buffered().use { fileOutputStream: BufferedOutputStream ->GZIPOutputStream(fileOutputStream).buffered().use { gzipOutputStream: BufferedOutputStream ->sourceFile.inputStream().buffered().use { bufferedInputStream: BufferedInputStream ->bufferedInputStream.copyTo(out = gzipOutputStream)}}}}/*** ```shell* PS C:\Users\29051> (Get-FileHash -Path C:\Users\29051\Downloads\dest.gz -Algorithm MD5).Hash.ToLower()* 98cbb6b41e3a4aeec9e35dfec9351673* ```*/internal fun compressFileToGzip2(sourceFile: File, targetFile: File) {targetFile.sink().gzip().buffer().use { bufferedSink: BufferedSink ->sourceFile.source().buffer().use { bufferedSource: BufferedSource ->bufferedSource.readAll(sink = bufferedSink)}}}internal fun getFileMd5(file: File): String {val digest: MessageDigest = MessageDigest.getInstance("MD5")file.inputStream().buffered().use { inputStream: InputStream ->val bytes = ByteArray(1024 * 8)var length: Intwhile (inputStream.read(bytes).also { length = it } > 0) {digest.update(bytes, 0, length)}val md5Bytes: ByteArray = digest.digest()return md5Bytes.joinToString(separator = "") { "%02x".format(it) }}}}

zip文件压缩可以看我的这篇文章

zip文件压缩

还有的话会继续在这篇文章补充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/972931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年口碑好的废木料蒸汽锅炉厂家推荐及采购指南

2025年口碑好的废木料蒸汽锅炉厂家推荐及采购指南行业背景与市场趋势随着全球环保意识的提升和可再生能源政策的推动,废木料蒸汽锅炉市场近年来呈现稳定增长态势。根据《2024-2029年中国生物质锅炉行业市场调研与投资…

郑州一对一辅导机构推荐:2026年家长优选排行榜单

咱们郑州小初高家长,为给孩子找个靠谱的一对一课外辅导,真是愁得头发都白了!住在金水区的家长天天刷测评问 “郑州一对一辅导机构哪个好?”,满大街的机构看着都差不多,分不清是真有口碑还是噱头;二七区的想选个…

2025年小区造雾定制厂家权威推荐榜单:景区喷雾/水雾造景/高压喷雾源头厂家精选

在当代小区环境规划中,造雾系统已成为提升居住品质的重要设施。据行业数据统计,2025年全国新建中高端小区中,约35% 的项目配备了专业造雾系统,用于降温、增湿、降尘及景观营造。为帮助物业及开发商精准选型,本文基…

整数拆分

题目描述: 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 样例:思路: 定义f[i]:拆分i,分得整数乘积的最大值。 那么对于每一个i,我…

2025年评价高的铝板锯切专机热门厂家推荐榜单

2025年评价高的铝板锯切专机热门厂家推荐榜单行业背景与市场趋势随着全球制造业向智能化、精密化方向发展,铝板锯切设备作为金属加工领域的关键装备,正迎来新一轮技术升级浪潮。据《2024-2029年中国金属切割设备行业…

2025年蝶阀实力厂家权威推荐榜单:闸阀/止回阀/阀门源头厂家精选

在工业流体控制系统中,蝶阀因其结构紧凑、启闭迅速的特点,已成为石油化工、市政水务、电力能源等领域的核心组件。行业数据显示,2025年全球大口径蝶阀市场规模预计将持续增长,年复合增长率(CAGR)为6.9%。面对市场…

2025年口碑好的手动热压机厂家推荐及选购指南

2025年口碑好的手动热压机厂家推荐及选购指南行业背景与市场趋势随着电子制造、汽车电子、新能源等行业的快速发展,手动热压机作为精密制造领域的关键设备,市场需求持续增长。据《2024-2029年中国热压机行业市场调研…

2025年热门的MEE自动复位防火阀厂家最新权威推荐排行榜

2025年热门的MEE自动复位防火阀厂家最新权威推荐排行榜 行业背景与市场趋势 随着建筑消防安全的日益重视,MEE(Mechanical Electrical Equipment)自动复位防火阀作为消防排烟系统的核心部件,市场需求持续增长。据…

2025年口碑好的WEX边墙轴流风机TOP品牌厂家排行榜

2025年口碑好的WEX边墙轴流风机TOP品牌厂家排行榜行业背景与市场趋势随着工业4.0时代的深入发展和"双碳"目标的持续推进,通风设备行业迎来了新一轮的技术革新与市场扩容。据《2024-2025年中国通风设备行业市…

洛谷T699642 [语言月赛 202511] 曼波 No More

题目描述 哈基米喜欢睡觉。 哈基米睡在一个 \(n\times m\) 的网格中,网格左上角的坐标为 \((0,0)\),右下角的坐标为 \((n-1,m-1)\)。网格被均匀划分为了 \(r\times c\) 大小的子网格,保证 \(n\bmod r=0\),\(m \bmo…

2025年知名的不锈钢衣柜厂家最新TOP排行榜

2025年知名的不锈钢衣柜厂家最新TOP排行榜行业背景与市场趋势随着消费者对家居产品环保性、耐用性和美观度要求的不断提升,不锈钢衣柜市场迎来了快速增长期。据中国家居行业协会最新数据显示,2024年不锈钢衣柜市场规…

【Linux】Ext系列文件系统 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年靠谱的不锈钢防火阀行业内知名厂家排行榜

2025年靠谱的不锈钢防火阀行业内知名厂家排行榜行业背景与市场趋势随着建筑安全标准的不断提高和消防法规的日益严格,不锈钢防火阀作为建筑通风与消防系统中的关键部件,其市场需求持续增长。根据中国消防协会最新发布…

gnu与linux

“GNU” 和 “Linux” 是两个密切相关但不同的概念,它们在操作系统的发展中扮演着重要角色。以下是它们的详细解释:1. GNU(GNU Project)定义:GNU 是一个自由软件项目,由 Richard Stallman(RMS)于 1984 年发起,…

gnu linux

您好!我是您的Linux系统助手,专注于GNU/Linux操作系统。如果您有任何关于Linux系统管理、命令行操作、Shell脚本编写或系统优化的问题,欢迎随时提问!以下是一些常见问题的示例,您可以参考:1. 如何查看当前系统信…

gnu for linux

你提到的 "GNU for Linux" 是一个很常见的术语,通常指的是 GNU (GNUs Unix Tools),即 GNU 工具集,这是 Linux 系统中非常重要的组成部分,由 GNU Project 开发。一、GNU 工具集(GNU Tools)简介GNU 工具…

如何理解 Linux 中的 登录shell 和 非登录shell,两者又有什么区别

如何理解 Linux 中的 登录shell 和 非登录shell,两者又有什么区别登录 SHELL: 就是使用 用户名/密码 登录系统的时候,此时会自动启动一个 shell 交互式命令行,这个就是登录shell。场景 是否登录 shell 原因ssh use…

2025年评价高的开天行业优选榜

2025年评价高的开天行业优选榜 行业背景与市场趋势 近年来,随着制造业智能化升级的加速推进,高端装备制造行业迎来新一轮增长。据《2024-2025年中国锻压设备行业分析报告》显示,全球锻压设备市场规模预计在2025年…

quick lauching of git-bash

quick lauching of git-bashSteps for ConfigurationAdd the directory where git-bash.exe is located to path environment variable. Make a copy of this file (e.g., name it gsh.exe) to simplify calling. Log …

2025年口碑好的短视频代运营热门品牌推荐榜

2025年口碑好的短视频代运营热门品牌推荐榜短视频代运营行业背景与市场趋势近年来,随着短视频平台的爆发式增长,短视频营销已成为企业品牌推广的重要渠道。据《2024年中国短视频行业发展趋势报告》显示,2024年中国短…