7872 7 3 2

       在使用轻站的时候总好像有一种违和感,不知道为什么总感觉像是少了什么功能一样,后来才发现作者大大好像还没提供本地文件读写的Api,没有文件读写Api意味着数据不能在本地进行持久化,无法数据持久化也就意味着无法保存想要保存的数据,于是乎我写了一个创建和读取本地文件的函数来作为暂时性的替代方案,废话就不多说了,直接上代码。

写入函数

/**全局变量   文件名   可带路径(以/开头)
 * eg: /data.json 、 /我的轻站/data.json
 *  */
var fname = getVar('fname');

/** url要写入的内容 可自行更改
 *  */
var u = getVar('url');
/**
 * 以覆盖的方式写入文件
 * @param {String} filename  文件名
 * @param {*} content   写入内容
 */
function write(filename, content) {
  var path =
    android.os.Environment.getExternalStorageDirectory()
      .getAbsolutePath()
      .toString() + '/Android/data/cn.nr19.mbrowser/files/';
  var file = new java.io.File(path + filename);
  if (!file.exists()) file.createNewFile();
  var fileWritter = new java.io.FileWriter(path + filename, false);
  fileWritter.write(content);
  fileWritter.close();
}

读取函数

/**
 * 读取指定文件内容并使用Json解析返回
 * @param {String} filename 文件名
 * @returns
 */
function read(filename) {
  var path =
    android.os.Environment.getExternalStorageDirectory()
      .getAbsolutePath()
      .toString() + '/Android/data/cn.nr19.mbrowser/files/';
  var file = new java.io.File(path + filename);
  if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
  if (!file.exists()) return [];
  var filelength = file.length();
  var filecontent = java.lang.reflect.Array.newInstance(
    java.lang.Byte.TYPE,
    filelength
  );
  var fin = new java.io.FileInputStream(file);
  fin.read(filecontent);
  return JSON.parse(new java.lang.String(filecontent));
  // 如果不需要Json解析内容可改为
  // return new java.lang.String(filecontent);
}​

日期格式化函数

/**
 * 返回指定格式日期
 * @param {String} fmt 日期格式
 * @returns
 */
Date.prototype.format = function (fmt) {
  var o = {
    'M+': this.getMonth() + 1, //月份
    'd+': this.getDate(), //日
    'h+': this.getHours(), //小时
    'm+': this.getMinutes(), //分
    's+': this.getSeconds(), //秒
    'q+': Math.floor((this.getMonth() + 3) / 3), //季度
    S: this.getMilliseconds(), //毫秒
  };
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(
      RegExp.$1,
      (this.getFullYear() + '').substr(4 - RegExp.$1.length)
    );
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      );
    }
  }
  return fmt;
};
var date = new Date().format('MM月dd日hh:mm');
e2Rex(date, '.all()');

根据唐牛大佬补充

以上函数用可用E2内置函数.time(YYYY年MM月dd日hh时mm分ss秒)代替

使用方法

//读取文件内容
var list = read(fname);
//获取传入内容使用Json解析 可自行选择传入内容格式
u = JSON.parse(u);
u['id'] = list.length;
u['date'] = getVar('date');
//追加
list.push(u);

//将Js对象转化为json对象写入文件
write(fname, JSON.stringify(list));
// alert('写入成功!');​

 

上传的附件:
最新回复 (7)
  • 0 引用
    DEMO复制不正常,不能自动导入。
    2021-12-12 只看Ta 收起回复
    漂泊的小猫: 不知道为什么一保存就被截断。。。,可能是我用了emoji表情的原因,我重新上传了
    2021-12-12回复
    lgh00: 回复 漂泊的小猫: 不是可能,就是enjoy,只要用了就不能正常复制。
    2021-12-12回复
  • 0 引用
    真大佬。读写本地几个月前我就向作者提过了
    2021-12-12 只看Ta 回复
  • .
    0 引用
    大佬
    2021-12-12 只看Ta 回复
  • 0 引用

    哈哈,不错哦!
    2021-12-13 只看Ta 回复
  • 0 引用
    你要是能把我发的那个视界|直播  本地化存储一下就好了,
    2021-12-13 只看Ta 收起回复
    漂泊的小猫: 我看了一下你那个都跳到浏览器了,浏览历史在浏览器里就能直接找到了,没必要做这个了
    2021-12-13回复
  • 0 引用
    小白膜拜
    2021-12-13 只看Ta 回复
  • 0 引用

    刚想起来。m是有日期专用e2的,如图

    2021-12-13 只看Ta 收起回复
    漂泊的小猫: 加上去了,我根本只知道还有这个函数,感觉他应该把参考文档好好再写写
    2021-12-13回复
    唐牛才是食神: 回复 漂泊的小猫: 大佬进群了没有?有些函数不问作者他是不用说的
    2021-12-14回复
    漂泊的小猫: 回复 唐牛才是食神: 没有,这个月有考试,估计得等月底才能加了,不过我抽空封装了一个js文件,等我发布了你可以看看
    2021-12-14回复
    • 轻创社区 - 有源软件体验中心
      9
        登录 注册
返回