最近项目中需要用uniapp读取本地环境下的txt文件,上网搜了一番之后发现了解决方案,故记录一下。

1. 读取txt文件

原理:利用H5 plusnative,引入java类来进行处理。

	function readJsonByFile(fileNamePath) {
	// 只能用于安卓 导入java类
	const File = plus.android.importClass('java.io.File')
	const BufferedReader = plus.android.importClass('java.io.BufferedReader')
	const FileReader = plus.android.importClass('java.io.FileReader')
	const FileWriter = plus.android.importClass('java.io.FileWriter')
	// 安卓11以下 /sdcard/自己的文件夹/1.txt
	// 安卓11 建议用 /storage/emulated/0/Download/自己的文件夹/1.txt
	// 读取txt文件 readFile ("/sdcard/修止符/配置.json")
	const readFile = (fileName) => {
		const readFr = new File(fileName)
		try {
			const reader = new BufferedReader(new FileReader(readFr))
			let txt
			let retxt = ''
			let flag = true
			while (flag) {
				txt = reader.readLine() // 读取文件
				if (txt == null) {
					flag = false
					break
				}
				retxt = retxt + txt
			}
			return retxt
		} catch (e) {
			console.log(e)
			return ''
		}
	}
	//const settingJsonPath = '/sdcard/wisdomApp/settingJson.txt'
	const json = readFile(fileNamePath)
	return json
}
2. 写入文件
	function writeJsonToFile(json, fileNamePath) {
	// 只能用于安卓 导入java类
	const File = plus.android.importClass('java.io.File')
	const BufferedReader = plus.android.importClass('java.io.BufferedReader')
	const FileReader = plus.android.importClass('java.io.FileReader')
	const FileWriter = plus.android.importClass('java.io.FileWriter')
	// 安卓11以下 /sdcard/自己的文件夹/1.txt
	// 安卓11 建议用 /storage/emulated/0/Download/自己的文件夹/1.txt


	// 写文件 writeFile("/sdcard/修止符/配置.json",{"主键":"值"})
	const writeFile = (fileName, res) => {
		try {
			// 不加根目录创建文件(即用相对地址)的话directory.exists()这个判断一值都是false
			const n = fileName.lastIndexOf('/')
			if (n !== -1) {
				const fileDirs = fileName.substring(0, n)
				console.log(fileDirs)
				const directory = new File(fileDirs)
				if (!directory.exists()) {
					const a = directory.mkdirs() // 不存在创建目录
					console.log(a)
				}
			}
			const file = new File(fileName)
			if (!file.exists()) {
				file.createNewFile() // 创建文件
			}
			const fos = new FileWriter(fileName, false)
			fos.write(res)
			fos.close()
			return true
		} catch (e) {
			console.log(e)
			return false
		}
	}
	// const settingJsonPath = '/sdcard/wisdomApp/settingJson.txt'
	// 写入文件
	writeFile(fileNamePath, json)
	return true
}
3. 注意

安卓6以上的环境, uniapp应用需要设置存储权限。可以在APP权限配置选项里把
WRITE_EXTERNAL_STORAGE 打上对钩。 结束

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐