基于Native.js实现Android文件的读写操作

    Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。我们在进行APP混合开发过程中免不了需要调用Andriod底层的一些API,也免不了可能会涉及到文件读取的操作之类的功能,这个时候可能就需要利用到JS代码调用Java代码,然后实现文件的读取操作,当然,Native.js给我们提供了很多已经封装好的API,方便直接调用Android底层API,但是实际情况下,总会遇到一些没有实现的功能,这个时候我们就需要自己去开发了,下面就以文件读写操作为例,看看Native.js是如何支持这些功能的。

import DateFormatUtil from '../utils/DateFormatUtil'

class FileManage {

	//plus是5+Runtime的内部对象。
	//就像chrome浏览器里有chrome.开头的一些对象方法,5+runtime内部内置了plus对象。
	constructor(plus) {
		this._plus = plus;
	};
	/**
	 * 导出文件到手机内存卡中
	 * @param exportFilePath 导出的文件目录
	 * @param fileName 文件名
	 * @param fileContent 文件具体内容
	 * 如完整路径:/sdcard/my-test.txt  
	 * "/" 表示:exportFilePath
	 * "my-test.txt" 表示:fileName
	 * @return 返回true or false
	 */
	exportFile(exportFilePath, fileName, fileContent) {
		//引入需要的类
		var File = this._plus.android.importClass("java.io.File");
		var FileOutputStream = this._plus.android.importClass("java.io.FileOutputStream");
		var String = this._plus.android.importClass("java.lang.String");
		var Exception = this._plus.android.importClass("java.lang.Exception");
		var NullPointerException = this._plus.android.importClass("java.lang.NullPointerException");

		try {
			var directory = new File("/sdcard" + exportFilePath);
			if(!directory.exists()) {
				directory.mkdirs(); //创建目录
			}

			var file = new File("/sdcard" + exportFilePath + fileName);

			if(!file.exists()) {
				file.createNewFile(); //创建文件
			}

			var fos = new FileOutputStream(new File("/sdcard" + exportFilePath + fileName));
			fos.write(new String(fileContent).getBytes()); //写入文件流
			fos.flush();
			fos.close();

			return true;
		} catch(e) {
			console.log(e);
			return false;
			//console.log(e.getMessage());
		}
		return false;
	};

	deleteFile(deleteFilePath, fileName) {
		var File = this._plus.android.importClass("java.io.File");
		var file = new File("/sdcard" + deleteFilePath + fileName);

		if(file.exists() && file.isFile()) {
			return file.delete();
		} else {
			return false;
		}
	}

	/**
	 * 读取文件中的数据内容
	 * @param readFilePath 读取的文件所在路径
	 * @param fileName 读取的文件名
	 */
	readFile(readFilePath, fileName) {
		//引入需要的类
		var File = this._plus.android.importClass("java.io.File");
		var StringBuilder = this._plus.android.importClass("java.lang.StringBuilder");
		var BufferedReader = this._plus.android.importClass("java.io.BufferedReader");
		var String = this._plus.android.importClass("java.lang.String");
		var FileReader = this._plus.android.importClass("java.io.FileReader");

		var file = new File("/sdcard" + readFilePath + fileName);
		var builder = new StringBuilder();

		try {
			var reader = new BufferedReader(new FileReader(file));
			var line = new String();
			while((line = reader.readLine()) != null) { //读取文件
				builder.append(line);
			}
			reader.close();
		} catch(e) {
			console.log(e);
			return '';
		}
		return builder.toString();
	};
	/**
	 * 遍历目录下面的所有文件,返回所有文件名
	 * @param 需要遍历的目录
	 */
	listFiles(directoryPath) {
		//引入需要的类
		var File = this._plus.android.importClass("java.io.File");

		var directory = new File("/sdcard" + directoryPath);

		if(!directory.exists()) {
			directory.mkdirs();
		}

		var files = directory.listFiles();
		//对文件进行排序
		for(var i = 0; i < files.length; i++) {
			for(var j = 0; j < files.length; j++) {
				if(files[i].lastModified() > files[j].lastModified()) {
					var temp = files[j];
					files[j] = files[i];
					files[i] = temp;
				}
			}
		}

		var resultArr = [];

		for(var i in files) {
			resultArr.push({
				'fileName': files[i].getName().split('.')[0],
				'lastModified': DateFormatUtil.format(new Date(files[i].lastModified()), 'yyyy-MM-dd hh:mm:ss')
			});
		}
		return resultArr;
	};
}

export default FileManage;

通过上面的代码,我们就可以轻松实现JS调用Java代码的功能。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值