当前位置:   article > 正文

uniapp安卓读取或写入txt文件,创建文件或文件夹,获取手机内置存储根路径

uniapp安卓读取或写入txt文件,创建文件或文件夹,获取手机内置存储根路径
  1. 使用应开启以下权限(读取和写入)
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  3. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

File.js

  1. /*
  2. 使用该类应开启以下权限(读取和写入)
  3. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  5. */
  6. /*
  7. 文件编码
  8. ansi(ascii):英文标准码0-127,包括控制符和其他英文字符编码,这在后来一直统一没再变过,当然它只需要一个字节保存
  9. gb2312和gbk:这两个是ancii码加上汉字的扩展,汉字多达10万,在ancii编码基础上再加一个字节表示汉字,共可表示字符65535个,包括了繁体字。因此一个中文字符包含两个字节。eclipse中默认编码方式为gbk。在Windows中文系统中ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码。
  10. Unicode编码:顾名思义,这是国际统一标准编码,在这之前各国标准编码不统一,微软等公司需要为各国的计算机系统定制符合不同编码标准的系统,显然,成本太高,并且互联网的出现让不同编码标准的计算机交互变得困难,如:两国的邮件系统,会因为使用不同的编码标准而导致接受方收到的邮件是乱码。
  11. utf-8和utf-16编码:UTF的意思是(UCS Transfer Format),显然是随着互联网的出现,需要解决Unicode在网络上的传输问题。顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF时并不是直接的对应,而是要过一些算法和规则来转换。UTF-8就是在互联网上使用最广的一种unicode的实现方式。
  12. */
  13. /**
  14. * 获取手机内置存储的根路径
  15. * @return {String}
  16. */
  17. const root = function() {
  18. const environment = plus.android.importClass("android.os.Environment");
  19. return environment.getExternalStorageDirectory();
  20. }
  21. /**
  22. * 获取指定文件夹下的所有文件和文件夹列表
  23. * @param {String} path 文件夹路径
  24. * @return {Array<String>} 文件和文件夹列表
  25. */
  26. const filelist = function(dir = '') {
  27. const File = plus.android.importClass("java.io.File");
  28. let list = [];
  29. let file = new File(dir);
  30. let tempList = file.listFiles();
  31. for (let i = 0; i < tempList.length; i++) {
  32. let fileName = tempList[i].getName();
  33. list.push(fileName);
  34. }
  35. return list;
  36. }
  37. /**
  38. * 创建文件
  39. * @return {boolean} flase=失败(已存在、操作失败),true=成功
  40. */
  41. const createNewFile = function(path = '') {
  42. const File = plus.android.importClass('java.io.File');
  43. let file = new File(path);
  44. if (!file.exists()) {
  45. return file.createNewFile();
  46. }
  47. return false;
  48. }
  49. /**
  50. * 创建文件夹
  51. * @return {boolean} flase=失败(已存在、操作失败),true=成功
  52. */
  53. const mkdirs = function(path = ''){
  54. const File = plus.android.importClass('java.io.File');
  55. let file = new File(path);
  56. if (!file.exists()) {
  57. return file.mkdirs();
  58. }
  59. return false;
  60. }
  61. /**
  62. * 读取文件
  63. * @param {String} path 文件路径
  64. * @param {String} charset 编码
  65. * @return {Array<String>} 内容列表(按行读取),文件不存在或异常则返回false
  66. */
  67. const readTxt = function(path = '', charset = 'utf-8') {
  68. const File = plus.android.importClass('java.io.File');
  69. const InputStreamReader = plus.android.importClass('java.io.InputStreamReader');
  70. const BufferedReader = plus.android.importClass('java.io.BufferedReader');
  71. const FileInputStream = plus.android.importClass('java.io.FileInputStream');
  72. let file = new File(path);
  73. let inputStreamReader = null;
  74. let bufferedReader = null;
  75. let list = [];
  76. try {
  77. if (!file.exists()) {
  78. return false;
  79. }
  80. inputStreamReader = new InputStreamReader(new FileInputStream(file), charset);
  81. bufferedReader = new BufferedReader(inputStreamReader);
  82. let line = '';
  83. while (null != (line = bufferedReader.readLine())) {
  84. list.push(line);
  85. }
  86. bufferedReader.close();
  87. inputStreamReader.close();
  88. } catch (e) {
  89. if (null != bufferedReader) {
  90. bufferedReader.close();
  91. }
  92. if (null != inputStreamReader) {
  93. inputStreamReader.close();
  94. }
  95. return false;
  96. }
  97. return list;
  98. }
  99. /**
  100. * 写入文件内容
  101. * @param {String} path 文件路径
  102. * @param {String} content 内容
  103. * @param {boolean} append 内容写入类型,false=不追加(覆盖原有内容),true=追加(从内容尾部写入)
  104. * @param {String} charset 编码
  105. * @return {boolean} true=成功,false=失败
  106. */
  107. const writeTxt = function(path = '', content = '', append = false, charset = 'utf-8') {
  108. const File = plus.android.importClass('java.io.File');
  109. const FileOutputStream = plus.android.importClass('java.io.FileOutputStream');
  110. const OutputStreamWriter = plus.android.importClass('java.io.OutputStreamWriter');
  111. let outputStreamWriter;
  112. let file = new File(path);
  113. try {
  114. //不存在则创建新的文件
  115. if (!file.exists()) {
  116. file.createNewFile();
  117. }
  118. outputStreamWriter = new OutputStreamWriter(new FileOutputStream(path, append), charset);
  119. outputStreamWriter.write(content);
  120. outputStreamWriter.close();
  121. } catch (e) {
  122. if (null != outputStreamWriter) {
  123. outputStreamWriter.close();
  124. }
  125. return false;
  126. }
  127. return true;
  128. }
  129. /**
  130. * 判断文件是否存在
  131. * @param path 文件路径
  132. * @return true=存在 false=不存在
  133. */
  134. const isFileExist = function(path = ''){
  135. const File = plus.android.importClass('java.io.File');
  136. return new File(path).exists()
  137. }
  138. /**
  139. * 删除文件
  140. * @param {String} path
  141. */
  142. const deleteFile = function(path = ''){
  143. const File = plus.android.importClass('java.io.File');
  144. let file = new File(path);
  145. if (file.exists()) {
  146. return file.delete();
  147. }
  148. return false
  149. }
  150. export default {
  151. root,
  152. filelist,
  153. createNewFile,
  154. mkdirs,
  155. readTxt,
  156. writeTxt,
  157. isFileExist,
  158. deleteFile
  159. }

uniapp开发记录

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/462655
推荐阅读
相关标签
  

闽ICP备14008679号