HarmonyOS 鸿蒙Next中如何根据选中文件url获取文件的大小

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

HarmonyOS 鸿蒙Next中如何根据选中文件url获取文件的大小 假如我有一个文件uri:“file://docs/storage/Users/xxxx/Download/123456.txt”,如何根据这个路径获取文件的大小啊?

3 回复

提供一个demo,可以参考,在fs.stat之前,要先调用fs.open方法打开文件:

import fs, { Options, ReadTextOptions } from '@ohos.file.fs';
import { common } from '@kit.AbilityKit';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { buffer } from '@kit.ArkTS';

@Entry
@Component
struct DocumentPickerSaveDemo {
@State message: string = 'Hello World';
private appContext: common.Context = getContext(this);
private fileDir: string = ''
@State resultFileDir: string = ''

createFile(){
let cacheDir = this.appContext.filesDir;
this.fileDir = cacheDir + '/HelloWorldlee.txt'
let file = fs.openSync(this.fileDir, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
let writeLen = fs.writeSync(file.fd, '你好世界!');
console.info("write data to file succeed and size is:" + writeLen);
fs.closeSync(file)
}
async saveFile(){
try {
let documentSaveOptions = new picker.DocumentSaveOptions();
documentSaveOptions.newFileNames = ['HelloWorld.txt'];
let documentPicker = new picker.DocumentViewPicker();
await documentPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
let uri = documentSaveResult[0];
this.resultFileDir = uri
let sanFile = fs.openSync(this.fileDir, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
fs.copyFileSync(sanFile.fd, pubFile.fd)

fs.close(sanFile)
fs.close(pubFile)
console.info('DocumentViewPicker.save successfully, documentSaveResult uri: ' + JSON.stringify(documentSaveResult));
}).catch((err: BusinessError) => {
console.error('DocumentViewPicker.save failed with err: ' + JSON.stringify(err));
});
let pubFile = fs.openSync(this.resultFileDir, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
let buf = new ArrayBuffer(4096);
fs.readSync(pubFile.fd, buf);
let str2 =buffer.from(buf).toString('utf-8')
let readTextOptions: ReadTextOptions = {
offset: 1,
// length: 0,
encoding: 'utf-8'
};
/*let stat = fs.statSync(this.resultFileDir);
readTextOptions.length = stat.size;*/
let str = fs.readTextSync(this.resultFileDir, readTextOptions);
console.info("readText succeed:" + str);
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error('DocumentViewPicker failed with err: ' + JSON.stringify(err));
}
}
async getFile(){
let documentSaveOptions = new picker.DocumentSaveOptions();
let documentPicker = new picker.DocumentViewPicker();
await documentPicker.select(documentSaveOptions).then((documentSaveResult: Array<string>) => {
let uri = documentSaveResult[0]
let file = fs.openSync(uri)
let filestat = fs.statSync(file.fd)
console.log('文件大小:' + filestat.size + 'B')
}).catch((err: BusinessError) => {
console.log(JSON.stringify(err))
})
}
build() {
Row() {
Column({space: 10}) {
Button('生成文件')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() =>{
this.createFile();
this.saveFile();
})
Button('获取文件')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() =>{
this.getFile()
})
}
.width('100%')
}
.height('100%')
}
}

function uint8ArrayToHexStr(data: Uint8Array): string {
let hexString = '';
let i: number;
for (i = 0; i < data.length; i++) {
let char = ('00' + data[i].toString(16)).slice(-2);
hexString += char;
}
return hexString;
}

更多关于HarmonyOS 鸿蒙Next中如何根据选中文件url获取文件的大小的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,可以通过File类来获取文件的大小。首先,你需要使用File类创建一个文件对象,然后调用length()方法来获取文件的大小。以下是一个示例代码:

import fileio from '@ohos.fileio';

let filePath = 'path/to/your/file'; // 替换为实际的文件路径
let file = new fileio.File(filePath, fileio.OpenMode.READ_ONLY);
let fileSize = file.length();
file.close();

在这个示例中,filePath是文件的URL或路径,fileio.File用于创建文件对象,length()方法返回文件的大小(以字节为单位),最后调用close()方法关闭文件。

请注意,fileio模块是鸿蒙系统中用于文件操作的模块,OpenMode.READ_ONLY表示以只读模式打开文件。

在HarmonyOS(鸿蒙Next)中,可以通过ohos.file.fs模块获取文件大小。首先使用fs.openSync打开文件,然后通过fs.statSync获取文件信息对象,最后访问size属性即可获取文件大小。示例代码如下:

import fs from '@ohos.file.fs';

let filePath = 'your_file_url'; // 替换为实际文件URL
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
let fileStat = fs.statSync(file.fd);
let fileSize = fileStat.size; // 获取文件大小
fs.closeSync(file);

注意:需确保文件URL有效且应用具有相应权限。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!