uniapp plus.io API 封装文件读写方法

// plus.io API 封装的文件读写方法

/**
 * 写入 JSON 到文件
 * @param {string} fileName 文件名称(如 '_downloads/device.json' 或 plus.io.PRIVATE_DOC + '/device.json')
 * @param {Object} data 要写入的对象
 * @returns {Promise<boolean>} 是否写入成功
 */
function writeJsonToFile(fileName, data) {
	const filePath = `_downloads/${fileName}.json`
	return new Promise((resolve, reject) => {
		plus.io.resolveLocalFileSystemURL(filePath, function(entry) {
			entry.createWriter(function(writer) {
				writer.onwrite = function() {
					console.error('写入成功', fileName);
					resolve(true);
				};
				writer.onerror = function(e) {
					console.error('写入失败', e);
					reject(false);
				};
				writer.write(JSON.stringify(data));
			}, function(e) {
				console.error('创建写入器失败', e);
				reject(false);
			});
		}, function(e) {
			// 文件不存在则创建
			plus.io.resolveLocalFileSystemURL(filePath.substring(0, filePath.lastIndexOf('/')),
				function(dirEntry) {
					dirEntry.getFile(filePath.substring(filePath.lastIndexOf('/') + 1), {
						create: true
					}, function(fileEntry) {
						fileEntry.createWriter(function(writer) {
							writer.onwrite = function() {
								resolve(true);
							};
							writer.onerror = function(e) {
								console.error('写入失败', e);
								reject(false);
							};
							writer.write(JSON.stringify(data));
						}, function(e) {
							console.error('创建写入器失败', e);
							reject(false);
						});
					}, function(e) {
						console.error('创建文件失败', e);
						reject(false);
					});
				},
				function(e) {
					console.error('目录不存在', e);
					reject(false);
				});
		});
	});
}

/**
 * 读取 JSON 文件内容
 * @param {string} filePath 文件路径(如 '_downloads/device.json' 或 plus.io.PRIVATE_DOC + '/device.json')
 * @returns {Promise<Object|null>} 读取到的对象,失败返回 null
 */
function readJsonByFile(fileName) {
	const filePath = `_downloads/${fileName}.json`
	return new Promise((resolve, reject) => {
		plus.io.resolveLocalFileSystemURL(filePath, function(entry) {
			entry.file(function(file) {
				var reader = new plus.io.FileReader();
				reader.onloadend = function(evt) {
					try {
						resolve(JSON.parse(evt.target.result));
					} catch (e) {
						console.error('JSON解析失败', e);
						resolve(null);
					}
				};
				reader.onerror = function(e) {
					console.error('读取失败', e);
					resolve(null);
				};
				reader.readAsText(file, 'utf-8');
			}, function(e) {
				console.error('获取文件失败', e);
				resolve(null);
			});
		}, function(e) {
			console.error('文件不存在', fileName, e);
			resolve(null);
		});
	});
}

export default {
	writeJsonToFile,
	readJsonByFile
};

用法示例:
写入:

 import storage from '@/utils/storage.js'
 await storage.writeJsonToFile('companyInfo', {a:1})

读取:

 let obj = await storage.readJsonByFile('companyInfo')
    if (obj) {
      console.log('读取到内容:', obj);
    } else {
      console.log('读取失败或内容为空');
   }
 });
// 文件写入 export const writeFileIos = function(filename, data) { plus.io.requestFileSystem( plus.io.PUBLIC_DOCUMENTS, // 文件系统中的根目录 fs => { // 创建或打开文件, fs.root是根目录操作对象,直接fs表示当前操作对象 let a = fs.root.toURL() let dirPath = a + '/' + 'youning/' + filename + '.txt'; fs.root.getFile(dirPath, { create: true // 文件不存在则创建 }, fileEntry => { // 文件在手机中的路径 console.log(fileEntry.fullPath, '文件在手机中的路径') fileEntry.createWriter(writer => { // 写入文件成功完成的回调函数 // 写入数据 writer.write(JSON.stringify(data)); writer.onwrite = e => { console.log("写入数据成功"); }; }) }, e => { console.log("getFile failed: " + e.message); }); }, e => { console.log(e.message); } ); } // 文件读取 export const readFileIos = function(filename) { plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) { // fs.root是根目录操作对象DirectoryEntry let a = fs.root.toURL() let dirPath = a + '/' + 'youning/' + filename + '.txt'; // /var/mobile/Containers/Data/Application/8D4886B0-4900-4B9E-99C5-BF53F72CB0BA/Documents/Pandora/documents/_documents/a/mayimei.txt fs.root.getFile(dirPath, { create: false }, function(fileEntry) { fileEntry.file(function(file) { var fileReader = new plus.io.FileReader(); fileReader.readAsText(file, 'utf-8'); fileReader.onloadend = function(evt) { var news = []; var result = evt.target.result; if (result != "") console.log(result, '读取的内容啊啊啊啊') callback({ state: 1, message: "读取成功!", data: result }); } }); }); }) } // 文件删除 export const deleteFileIos = function(filename) { plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) { let a = fs.root.toURL(); let dirPath = a + '/' + 'youning/' + filename + '.txt'; fs.root.getFile(dirPath, { create: false }, function(fileEntry) { // 删除这个地址对应的文件 fileEntry.remove(function(entry) { console.log("删除文件成功") }, function(e) { console.log(e.message); }) }, function(err) { console.log(err, '删除失败啊啊啊') } ) }) // 下面这里是递归删除, 但实践删除不成功, 报"文件路径不存在", 暂不清楚原因 /* plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) { // fs.root是根目录操作对象DirectoryEntry let a = fs.root.toURL(); let dirPath = a + '/' + 'youning/' + filename + '.txt'; plus.io.resolveLocalFileSystemURL(dirPath, function(entry) { //读取这个目录对象 var directoryReader = entry.createReader(); //读取这个目录下的所有文件 directoryReader.readEntries(function(entries) { //如果有才操作 console.log(entries, 'entries') if (entries.length > 0) { //删除目录将会删除其下的所有文件及子目录 不能删除根目录,如果操作删除根目录 //将会删除目录下的文件及子目录,不会删除根目录自身。 删除目录成功通过succesCB //回调返回,失败则通过errorCB返回。 entry.removeRecursively(function(entry) { callback(); console.log('删除成功回调') //删除成功回调 }, function(e) { //错误信息 console.log(e.message + ' ?!') }) } }) }, function(e) { console.log(e, '删除文件的报错') }) }) */ } 这个支持 ios 读写吗, 一般写在哪个目录下, 还有可以封装一下模块调用吗
07-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值