uniapp Android 调用5+plus 的IO模块 操作文件管理

这篇具有很好参考价值的文章主要介绍了uniapp Android 调用5+plus 的IO模块 操作文件管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于最近uniapp项目需要调5+puls,来操作手机文件增删改查,于是入坑了native.js>android>IO,官网文档先献上
5+puls官网文档

首先介绍一下,我们存储空间有2种模式那就是沙盒模式和系统公共目录
我们这里用到的是沙盒模式,app的应用根目录以内存储空间(不需要授权也能访问,默认授权了)
我们的下载文件储存到手机的地址uni.saveFile()也是储存在沙盒模式下,

沙盒模式

PRIVATE_WWW: 应用私有资源目录常量
PRIVATE_DOC: 应用私有文档目录常量
PUBLIC_DOCUMENTS: 应用公共文档目录常量(下面例子用到的)
PUBLIC_DOWNLOADS: 应用公共下载目录常量
那么如果我想下app应用的根目录下新建文件或者新建目录怎么操作呢,加粗样式骚操作如下

export function createFlie(path,data) {
  return new Promise(resolve => {//这里封装了个是一个promise异步请求
    // plus.io.requestFileSystem是请求本地文件系统对象
    plus.io.requestFileSystem(
    	plus.io.PUBLIC_DOCUMENTS, // 文件系统中的根目录下的DOCUMENTS目录
    	fs => {
    		// 创建或打开文件, fs.root是根目录操作对象,直接fs表示当前操作对象
    		fs.root.getFile(path+'.json', {
    			create: true // 文件不存在则创建
    		}, fileEntry => {
    			// 文件在手机中的路径
    			// console.log(fileEntry.fullPath)
    			fileEntry.createWriter(writer => {
    				// 写入文件成功完成的回调函数
    				writer.onwrite = e => {
    					console.log("写入本地文件成功");
						resolve("写入本地文件")
    				};
    				// 写入数据
    				writer.write(JSON.stringify(data));
    			})
    		}, e => {
    			console.log("getFile failed: " + e.message);
    		});
    	},
    	e => {
    		console.log(e.message);
    	}
    );
  })
}
//查看我们新建的documents目录下的所有文件,或者删除指定文件
export function getFileList(path) {
	return new Promise(resolve => { //文件读写是一个异步请求 用promise包起来方便使用时的async+await
	//  io.dcloud.HBuilder 是真机调试的包名,,
	//"/storage/emulated/0/Android/data/io.dcloud.HBuilder/documents"
	//  如果要进行打包那么就要改成你打包包名,比如我的包名是uni.UNIACE0B00那就改成
	//  "/storage/emulated/0/Android/data/uni.UNIACE0B00/documents"
		plus.io.requestFileSystem(
			"/storage/emulated/0/Android/data/uni.UNIACE0B00/documents", //指定的目录
			function(entry) {
				var directoryReader = entry.createReader(); //获取读取目录对象
				directoryReader.readEntries(
					function(entries) {
						resolve(entries)
						//entries目录是一个数字遍历就能得到文件了,如下
						// for (var i = 0; i < entries.length; i++) {
						// 	//   entries[i].remove();  //这是删除指定的文件
						// 	console.log("文件信息:" + entries[i].name);
						// }
					},
					function(err) {
						uni.showToast({
							title: "访问目录失败:" + err.message,
							duration: 2000
						})
						console.log("访问目录失败");
					});
			},
			function(err) {
				// uni.showToast({
				// 	title: "访问指定目录失败:" + err.message,
				// 	duration: 2000
				// })
				console.log("访问指定目录失败:" + err.message);
			});
	})
}
//查看目录下的某个指定文件
export function getFileData(path) {
	return new Promise(resolve => { //文件读写是一个异步请求 用promise包起来方便使用时的async+await
		plus.io.requestFileSystem(
			plus.io.PUBLIC_DOCUMENTS,
			fs => {
				fs.root.getFile(path + '.json', {
					create: false
				}, fileEntry => {
					fileEntry.file((file) => {
						console.log("文件大小:" + file.size + '-- 文件名:' + file.name);
						//创建读取文件对象
						let fileReader = new plus.io.FileReader();
						//以文本格式读取文件数据内容
						fileReader.readAsText(file, 'utf-8');
						//文件读取操作完成时的回调函数
						fileReader.onloadend = (evt) => {
							console.log(JSON.parse(evt.target.result),
								'JSON.parse(evt.target.result)')
							resolve(JSON.parse(evt.target.result))
							// sURL = JSON.parse(evt.target.result).URL;

						}
					});
				}, e => {
					console.log("getFile failed: " + e.message);
				});
			},
			e => {
				console.log(e.message);
			}
		);
	})
}

在页面调用时

import { createFlie,getFileData,getFileList } from '@/utils/localFile'

//新建文件
async customFlie() {
let fileName=123 //fileName为你要定义的字符串文件名,
let ballList=[0]   //ballList是你要存的json数据
	let resC = await createFlie(fileName, ballList)
}

async getlist() {
     //查看某个指定的目录下的所有文件文件
	 let resFileList = await getFileList()
     //查看documents目录下的某个指定文件,比如123
     let fileName=123
     let resFileData = await getFileData(fileName)
}

上面就是操作沙盒文件的方法

系统的公共目录

那么延伸一下,如果要读取操作系统的公共目录文件方法如下

export function getFileList() {
	return new Promise(resolve => { 
    调用系统的目录文件用绝对路径在在沙盒模式的路径前+file://
		plus.io.resolveLocalFileSystemURL(
			 "file:///storage/emulated/0/DCIM/Camera",, //系统公共本地相册
			function(entry) {
				var directoryReader = entry.createReader(); //获取读取目录对象
				directoryReader.readEntries(
					function(entries) {
						resolve(entries)
						//entries目录是一个数字遍历就能得到文件了,如下
						// for (var i = 0; i < entries.length; i++) {
						// 	//   entries[i].remove();  //这是删除指定的文件
						// 	console.log("文件信息:" + entries[i].name);
						// }
					},
					function(err) {
						console.log("访问目录失败");
					});
			},
			function(err) {
				console.log("访问指定目录失败:" + err.message);
			});
	})
}

如果需要新建本地目录或者文件呢
5+plus 貌似没有提供api,需要用原生插件的方式
接下来是原生插件开发思路
android 9及以下除其他应用的内部空间不可以读写,其他任意目录的文件都可以读写。

安android 10如果 29<targetSdkVersion <30 可以在AndroidManifest.xml文件中application节点中加上android:requestLegacyExternalStorage="true”来关闭分区,
如果大于targetSdkVersion >30,equestLegacyExternalStorage="true”也会失效
并申请权限

<uses-permission android:name=“android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>
<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE\"/>
<uses-permission android:name=“android.permission.READ_EXTERNAL_STORAGE\"/>

andorid 11+会强制执行分区存储。不允许应用读写操作非应用沙盒目录和系统公共目录下的资源文件。需要获取全部文件权限文章来源地址https://www.toymoban.com/news/detail-419513.html

到了这里,关于uniapp Android 调用5+plus 的IO模块 操作文件管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【文件操作与IO】Java中如何操作文件

    目录  Java 中操作文件 File 概述 属性 构造方法 方法 代码示例 文件内容的读写 —— 数据流  InputStream 概述 FileInputStream 概述 利用 Scanner 进行字符读取 OutputStream 概述 利用 OutputStreamWriter 进行字符写入 利用 PrintWriter 找到我们熟悉的方法 代码参考 如何按字节进行数据读 如何按

    2024年02月12日
    浏览(56)
  • UniApp 调用 Android SDK 中的原生方法

    UniApp 调用 Android SDK 中的原生方法 在开发移动应用程序时,我们经常需要将 JavaScript 代码和原生代码进行交互。UniApp 是一个跨平台的移动应用框架,可以同时构建 iOS 和 Android 应用程序。本文将介绍如何在 UniApp 中调用 Android SDK 中的原生方法。 创建 Android SDK Module 首先,我们

    2024年02月06日
    浏览(37)
  • 【JavaEE】文件操作 —— IO

    文件内容 文件大小 文件路径 文件名称 采用树形结构进行管理。 分为两种:相对、绝对路径。 相对路径:相对于当前位置的路径,以“./xxx.xxx”为标志 绝对路径:以从盘符开始到某一级的路径 输入和输出是以 CPU的角度 进行观察。 输出: 向屏幕上打印,就是打印内容从

    2024年01月21日
    浏览(40)
  • 文件操作---IO

    狭义的文件: 存储在硬盘上的数据,以“文件”为单位,进行组织 。比如: 广义的文件:操作系统是用来管理软硬件资源的,操作系统往往把这些资源都统一的抽象成“文件”来进行管理。即“一切皆文件”。 比如:有一个键盘,从键盘读取数据就是读文件;将信息显示在

    2024年02月06日
    浏览(25)
  • 文件操作和IO详解

    文件,File 这个概念,在计算机里,也是“一词多用”. 狭义的文件: 指的是硬盘上的文件和目录(文件夹) 广义的文件: 泛指计算机中很多的软硬件资源.操作系统中,把很多的硬件设备和软件设备都抽象成了文件.按照文件的方式来统一管理.例如网卡,操作系统就是把网卡当成了一个文

    2024年02月08日
    浏览(28)
  • 4.文件操作和IO

    大家好,我是晓星航。今天为大家带来的是 文件操作和IO 相关的讲解!😀 我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概

    2024年02月12日
    浏览(27)
  • 文件操作IO

    我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般 文件除了有数据内容之外,还

    2024年02月10日
    浏览(25)
  • <JavaEE> 文件IO -- File类和文件操作

    目录 一、文件的概念 二、文件系统 三、文件类型 四、使用 File 类进行文件操作 4.1 File 类中的 pathSeparator 属性 4.2 File 类构造方法 4.3 File 类常用方法 什么是文件? 广义上的“文件”是指抽象化的操作系统中的硬件设备和软件资源,目的是对这些“文件”进行同一的管理。

    2024年02月04日
    浏览(39)
  • Java之文件操作与IO

    目录 一.认识文件 1.1文件是什么?  1.2文件的组织  1.3文件路径 1.4文件的分类 二.文件操作 2.1File概述  三.文件内容操作--IO 3.1JavaIO的认识  3.2Reader和Writer ⭐Reader类  ⭐Writer类 3.2FileInputStream和FileOutputStream ⭐FileInputStream类 ⭐FileOutputStream类 四.总结 🎁个人主页:tq02的博客_C

    2024年02月10日
    浏览(39)
  • Linux基础IO【文件理解与操作】

    ✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Great minds discuss ideas. Average minds discuss events. Small minds discuss people. 大智论道,中智论事,小智论人。 文件操作是 基础IO 学习的第一步,我们在 C语言 进阶中,就

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包