HarmonyOS 鸿蒙Next 如何获取一个File的md5值

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何获取一个File的md5值 我们Android端有一个获取文件md5的方法如下

public static String getFileMD5(File file) {
  MessageDigest messageDigest;
  RandomAccessFile randomAccessFile = null;
  try {
    messageDigest = MessageDigest.getInstance("MD5");
    if (file == null) {
      return "";
    }
    if (!file.exists()) {
      return "";
    }
    randomAccessFile = new RandomAccessFile(file, "r");
    byte[] bytes = new byte[1024 * 1024 * 10];
    int len;
    while ((len = randomAccessFile.read(bytes)) != -1) {
      messageDigest.update(bytes, 0, len);
    }
    BigInteger bigInt = new BigInteger(1, messageDigest.digest());
    StringBuilder md5 = new StringBuilder(bigInt.toString(16));
    while (md5.length() < 32) {
      md5.insert(0, "0");
    }
    return md5.toString();
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      if (randomAccessFile != null) {
        randomAccessFile.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  return "";
}

在ArkTS中如何实现上述方法呢,确保同一文件的MD5一致


更多关于HarmonyOS 鸿蒙Next 如何获取一个File的md5值的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以用 [@ohos](/user/ohos).file.hash 接口,参考文档: [@ohos.file.hash (文件哈希处理)-ArkTS API-Core File Kit(文件基础服务)-应用框架 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V14/js-apis-file-hash-V14)

参考如下demo代码:

import picker from '[@ohos](/user/ohos).file.picker';
import fs from '[@ohos](/user/ohos).file.fs';
import { BusinessError } from '[@ohos](/user/ohos).base';
import { hash } from '@kit.CoreFileKit';
import { Hash } from '[@ohos](/user/ohos).file.hash';

@Entry
@Component
struct PhotoPage {
  @State message: string = 'Hello World';
  private photoSelectOptions = new picker.PhotoSelectOptions();
  private photoViewPicker = new picker.PhotoViewPicker();
  private uris: Array<string> = [];

  aboutToAppear(): void {
    this.photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
    this.photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.photoViewPicker.select(this.photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
              this.uris = photoSelectResult.photoUris;
              console.info('photoViewPicker.select to file succeed and uris are:' + this.uris);
              let pathDir = getContext(this).filesDir
              let file1 = fs.openSync(this.uris[0])
              let filePath = pathDir + '/' + file1.name
              fs.copyFileSync(file1.fd, filePath)
              console.info("calculate file hash pathDir:" + pathDir);
              Hash.hash(filePath, "sha256").then((str: string) => {
                console.info("calculate file hash succeed:" + str);
              }).catch((err: BusinessError) => {
                console.error("calculate file hash failed with error message: " + err.message + ", error code: " + err.code);
              });
            }).catch((err: BusinessError) => {
              console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 如何获取一个File的md5值的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,获取一个文件的MD5值通常涉及读取文件内容并使用MD5算法进行哈希处理。以下是一个基于HarmonyOS原生API实现文件MD5值计算的简要说明:

HarmonyOS提供了丰富的文件操作API以及加密哈希算法库。你可以使用File类进行文件读取,结合MessageDigest类进行MD5哈希计算。具体步骤如下:

  1. 打开文件:使用File类定位到目标文件,并通过文件流读取文件内容。

  2. 初始化MD5哈希:创建MessageDigest实例,并指定算法为"MD5"。

  3. 更新哈希值:分块读取文件内容,并更新到MessageDigest实例中。

  4. 获取哈希结果:完成文件读取后,调用digest()方法获取MD5哈希值,通常转换为十六进制字符串表示。

示例代码(伪代码,具体实现需根据HarmonyOS SDK调整):

// 伪代码示例,需根据实际环境调整
File file = new File("path/to/your/file")
MessageDigest md = MessageDigest.getInstance("MD5")
FileInputStream fis = new FileInputStream(file)
byte[] buffer = new byte[1024]
int bytesRead
while ((bytesRead = fis.read(buffer)) != -1) {
    md.update(buffer, 0, bytesRead)
}
fis.close()
byte[] md5Bytes = md.digest()
String md5String = bytesToHex(md5Bytes) // 自定义方法将字节数组转换为十六进制字符串

注意:上述代码为逻辑描述,具体API调用和类名需参考HarmonyOS官方文档。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部