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

2023-11-15

    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代码的功能。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 基础css-flex布局基础属性

    1 flex布局 弹性布局 伸缩布局 设置当前盒子为弹性盒子 display flex 设置主轴方向的对齐方式 justify content justify content center 设置侧轴方向的对齐方式 align items a
  • replace(),IndexOf(),substring() ,lastIndexOf() ,split() ,pollFirst() ,pollFirst()

    replace pattern replacement 使用replacement替换pattern 如果pattern是字符串只替换第一个匹配项 如果pattern是正则表达式则替换每次匹配都要调用的回调函数 实例 String a 1
  • win10 系统开启自带热点,手机无法连接(连接超时)

    win10开始自带热点 手机成功连接 颇费周折 所以在此记录一下 也给其他人一个参考 今天想在win10上安装个WIFI软件 好让手机连接 结果无意间发现win10自带了热点功能 于是赶紧打开 手机的WIFI列表也显示出来了 本以为就这样愉
  • 国际MES供应商与产品大全

    最近花了一点时间 将国际上知名的MES厂商和其产品整理了一下 如下 ABB ABB 苏黎世 瑞士 是一个240亿美元的自动化和电力技术的全球业务的供应商 它的制造软件利用其控制及自动化产品通用解决方案的一部分 其系统800xa控制体系结构
  • Android 自定义播放暂停按钮图片

    Android 自定义播放暂停按钮图片 在开发Android应用程序时 我们经常需要使用播放暂停按钮来控制媒体播放器的状态 虽然Android提供了默认的播放暂停按钮 但有时候我们希望根据设计需求自定义这些按钮的外观 在本文中 我将详细介绍
  • 嵌入式毕设分享 自动晾衣架设计与实现(源码+硬件+论文)

    文章目录 0 前言 1 主要功能 2 硬件设计 原理图 3 核心软件设计 4 实现效果 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学
  • 解决tmux启动「can't create socket」的问题

    Tmux是终端重度用户的好帮手 你再也不用担心以下问题 任务运行一半要下班 发现忘记使用nohup 网络不稳定 终端会掉线 有人找我开会 切换有线 无线会掉线 我入职以后 一直在开发机里面使用tmux和screen 在我发现tmux之前 最
  • Java的循环

    目录 1 while循环 2 do while循环 3 for 循环 1 while循环 while循环结构 语法结构 初始值 while 条件 循环操作代码块 迭代代码 执行规律 1 首先执行一次初始值 2 然后判断条件 如果条件为tru
  • ESP32的WIFI的STA模式&调控ESP32蓝牙和WIFI发射功率

    以下相关API接口的定义可进入l乐鑫官方查看 Wi Fi 库 ESP32 ESP IDF 编程指南 v4 4 文档 STA模式配置过程 include
  • springboot 获取当前日期_Spring Boot获取时间

    运行环境新建测试类 package com wusiyao websockets service import org springframework stereotype Service import java text SimpleDa
  • 【Linux后端服务器开发】常用开发工具

    目录 一 apt yum 二 gcc g 三 make makefile 四 vi vim 五 gdb 一 apt yum apt 和 yum 都是在Linux环境下的软件包管理器 负责软件的查找 安装 更新与卸载 apt 是Ubuntu系
  • 小程序经典案例

    1 上拉触底事件 data colorList isloding false getColors this setData isloding true 需要展示 loading 效果 wx showLoading title 数据加载中 w
  • Java学习笔记 03

    相关文章 Java学习笔记 01 概论 Java学习笔记 02 快速之旅 Java环境配置及HelloWorld程序 引言 写这篇文章 主要是为了以后能快速复习Java的基础语法 同时 帮助有C 等语言基础的同学快速入门Java 目录 一
  • SmartFusion从FPGA到ARM系列教程

    前言 本系列教程 将会以Microsemi SmartFusion一代芯片A2F200M3F为例 简单介绍片上ARM Cortex M3 硬核 MCU 基本外设的使用 及其与FPGA逻辑模块进行交互的示例 在学习片上硬核ARM Cortex

随机推荐

  • 网上阅卷系统php源码,又开源了,网上阅卷系统自动识别功能代码

    想让自己轻松点就要让计算机多为你做点 前几天一个朋友找到我让我做一个网上阅卷系统 就是实现这么几个功能 高速扫描仪扫描试卷后得到一张一张的图片 软件的功能就是处理图片 计算成绩 再详细点就是自动识别考生涂的学号 自动识别考生的选择题答案并记
  • css设计引言,HTML5与CSS3设计模式 引言(3)

    引言 3 2 代码清单2 浮动下沉首字示例 HTML pclass hanging indent spanclass hanging dropcap H span anging Dropcap p CSS hanging indent pa
  • 2022-渗透测试-git提权(Linux)

    目录 1 什么是提权 2 git提权命令 3 git的使用 1 什么是提权 提权就是通过各种办法和漏洞 提高自己在服务器中的权限 以便控制全局 利用漏洞的最终目的是获取被测系统的最高权限 即Windows中管理员账户的权限 或Linux中r
  • C++自定义connect超时时间——非阻塞套接字法

    一 代码 include
  • 深圳大学数据库系统实验 Leasing Luxury Database system 基于PHP,MySQL,Web三件套

    本实验要求搭建一个手袋租聘的数据库系统 并实现以下要求 创建一个数据库 可以记录客户数据 手袋数据 租聘数据 设计者数据 用户可以提供自己的邮箱地址 邮寄地址 信用卡号码 来注册租聘网站 数据库要展示所有课租聘的手袋 已被租聘的手袋用户不能
  • java基础之Map集合

    Map集合 HashMap 数据结构 HashMap数据存放过程 HashMap 线程安全问题 多线程不安全案例 Collections synchronizedMap new HashMap 保证Map安全 HashTable 数据结构
  • 【论文译文】VQVAE2

    译文仅供参考 原文是pdf 想下载的话可以戳 http www gwylab com pdf vqvae2 chs pdf
  • python DVWAXSSPOC练习

    XSS反射性低难度 数据包 GET dv vulnerabilities xss r name 3Cscript 3Ealert 28 27xss 27 29 3C 2Fscript 3E HTTP 1 1 Host 10 9 75 161
  • 【C++入门】友元函数详解(定义、实现、优缺点)

    1 友元函数 友元类定义 1 在类中用friend关键字去声明函数 类 则这个函数 类就会变成友元函数 友元类 2 友元函数 友元类的声明位置没有要求 可以在private protected public权限区 效果都是一样的 3 友元函
  • Cocos Creator使用Vs Code与Chrome调试

    使用VS Code配合 Chrome与VS Code 插件 Debugger for Chrome 调试cocos creator项目的网页版时 出现访问失败的情况 这是因为通过 的操作生成出来的launch json 文件的默认端口为80
  • SSD(single shot multibox detector)算法及Caffe代码详解

    这篇博客主要介绍SSD算法 该算法是最近一年比较优秀的object detection算法 主要特点在于采用了特征融合 论文 SSD single shot multibox detector 论文链接 https arxiv org ab
  • 什么是乐观锁和悲观锁?

    乐观锁和悲观锁是并发控制的两种不同策略 用于在多线程环境下管理共享资源的访问 它们有不同的思想和实现方式 悲观锁 Pessimistic Locking 思想 悲观锁的思想是 它假定在并发访问中会发生冲突 因此在访问共享资源之前会先加锁 以
  • 在教学中常被问到的几个vue3.x与typescript的问题,统一解答

    在教学当中 学生在学习vue3 x时 常常会问到typescript和vue3 x之间的关系 感觉这两个技术总是绑在一起的 下面老赵来统一解答一下 那学vue3 x 为什么要求也要掌握typescript Vue 3 x是一个使用TypeS
  • python计算矩阵间的欧式距离

    背景 计算一个M D的二维矩阵与一个N D的二维矩阵各个行向量之间的距离 不用循环来做 如果计算两个一维向量P C的维数相同 则它们的欧氏距离为 化简之后为 我们继而推广 一个一维向量与一个二维矩阵各个行向量的欧氏距离为 再继续推广到一个二
  • Java选择排序

    1 选择排序 选择排序是一种简单直观的排序算法 其基本原理是每一次从待排序的数组里找到最小值 最大值 的下标 然后将最小值 最大值 跟待排序数组的第一个进行交换 然后再从剩余的未排序元素中寻找到最小 大 元素 然后放到已排序的序列的末尾 反
  • 2.Node.js的安装 及 小案例——实现Hello World

    1 编辑器 初期 记事本Ediplus Nodepad 后期 Webstrom Hbuilder 2 Node js的下载 安装 测试 1 下载 http nodejs cn 2 安装 在windows版本操作系统下 直接点击 下一步 即可
  • vue+element在el-table表头添加搜索框实现模糊查询

    页面初始展示 实现模糊查询 gt
  • 如何理解邮件中的“CC、PS、FYI”等英文缩写?

    文章目录 2015年皮卡丘大学毕业初 加入一家总部在荷兰的外企 刚入职邮件中的英文缩写把皮卡丘折磨的晕头转向 比如OOO CC FYI OMW 你知道这些缩写表达的意思吗 01 OOO 是什么意思 OOO千万别理解成 哦哦哦 OOO Out
  • 安装虚拟机VMWare后再装LINUX系统(含避坑指南)

    一 下载 到官网下载虚拟机VMware Download VMware Workstation Pro 二 安装前的电脑设置 不要着急装 不设置好是安装不了的 还会引起暴躁 1 BIOS模式开启intel vt x 一般是禁用的 即 Int
  • 基于Native.js实现Android文件的读写操作

    Native js技术 简称NJS 是一种将手机操作系统的原生对象转义 映射为JS对象 在JS里编写原生代码的技术 我们在进行APP混合开发过程中免不了需要调用Andriod底层的一些API 也免不了可能会涉及到文件读取的操作之类的功能 这