易创云论坛

 找回密码
 立即注册
查看: 2504|回复: 0

[Androd源码] mui 获取sd卡文件操作

[复制链接]

170

主题

178

帖子

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
100700
发表于 2021-7-3 11:39:09 | 显示全部楼层 |阅读模式
原文连接 https://blog.csdn.net/qq_38322527/article/details/80902566

  1. <!doctype html>
  2. <html>

  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  7. <link href="../css/mui.min.css" rel="stylesheet" />
  8. <header class="mui-bar mui-bar-nav">
  9. <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
  10. <h1 class="mui-title">文件查找</h1>
  11. </header>
  12. </head>

  13. <body>
  14. <div class="mui-content">
  15. <ul id="list" class="mui-table-view mui-table-view-chevron"></ul>
  16. </div>
  17. <script src="../js/mui.min.js"></script>
  18. <script src="../js/njs-io.js" type="text/javascript" charset="utf-8"></script>
  19. <script type="text/javascript">
  20. var nowFileType;
  21. var subRoot = null;
  22. var lockOadWebview = null;
  23. mui.init({
  24. /*preloadPages: [{
  25. id: 'lock-oadUpdate.html',
  26. url: 'lock-oadUpdate.html'
  27. }]*/
  28. });
  29. mui.plusReady(function() {
  30. var self = plus.webview.currentWebview();
  31. nowFileType = self.fileType;
  32. console.log("filepath:" + self.filepath);
  33. init(self.filepath);
  34. var sdRoot = getSDRoot();
  35. /*var location = "Download";
  36. init(sdRoot + "/" + location);*/

  37. //点击事件
  38. mui('.mui-table-view').on('tap', 'li', function() {
  39. var name = this.getAttribute('name');
  40. var fileType = this.getAttribute('data-type');
  41. var filepath = subRoot + '/' + name;
  42. console.log("文件路径-->" + filepath);
  43. console.log("文件名称-->" + name);

  44. if(fileType === 'Folder') {
  45. mui.openWindow({
  46. url: 'file-query.html',
  47. id: 'file-query.html',
  48. createNew: true,
  49. extras: {
  50. filepath: filepath,
  51. fileType:nowFileType
  52. }
  53. })
  54. } else {
  55. //文件
  56. if(name.indexOf(".bin") != -1) {
  57. console.log("这是bin文件");
  58. if(name.indexOf("_"+nowFileType) == -1){
  59. mui.alert("请使用 "+nowFileType +" 类型文件进行升级操作");
  60. return;
  61. }
  62. if(!lockOadWebview) {
  63. lockOadWebview = plus.webview.getWebviewById("lock-oadUpdate.html");
  64. }
  65. mui.fire(lockOadWebview, "oadInfa", {
  66. fileName: name,
  67. filePath: filepath
  68. })

  69. //跳转不了
  70. /*mui.openWindow({
  71. url: 'lock-oadUpdate.html',
  72. id: 'lock-oadUpdate.html'
  73. });*/
  74. mui.back();
  75. }
  76. }
  77. })
  78. })

  79. function init(filePath) {
  80. // 获得sd卡根目录
  81. document.querySelector('.mui-title').innerHTML = filePath;
  82. var File = plus.android.importClass("java.io.File");
  83. subRoot = new File(filePath);

  84. // 遍历sd卡根目录下的所有文件和文件夹
  85. var files = plus.android.invoke(subRoot, "listFiles");
  86. var len = files.length;

  87. var list = document.getElementById("list");
  88. var fragmentFolder = document.createDocumentFragment();
  89. var fragmentFile = document.createDocumentFragment();
  90. var li;
  91. for(var i = 0; i < len; i++) {
  92. var file = files[i];
  93. // 过滤隐藏文件
  94. if(!plus.android.invoke(file, "isHidden")) {
  95. var name = plus.android.invoke(file, "getName");
  96. li = document.createElement('li');
  97. li.className = 'mui-table-view-cell mui-media';
  98. li.setAttribute('name', name);

  99. // 判断是文件还是文件夹
  100. if(plus.android.invoke(file, "isDirectory")) {
  101. // 设置标志为文件夹,供后面使用
  102. li.setAttribute('data-type', 'Folder');
  103. // 读取文件夹下子文件夹及子文件数目
  104. var obj = readSonFilenum(file);
  105. li.innerHTML = '<a class="mui-navigate-right">' +
  106. '<img class="mui-media-object mui-pull-left" src="../img/folder.png">' +
  107. '<div class="mui-media-body">' + name +
  108. '<p class="mui-ellipsis">文件夹数量:' + obj.subFolderNum + ' 文件数量:' + obj.subFileNum + '</p></div></a>';
  109. fragmentFolder.appendChild(li);
  110. } else {
  111. li.setAttribute('data-type', 'File');
  112. // 读文件大小
  113. var fileSizeString = readFileSize(file);
  114. li.innerHTML = '<a class="mui-navigate-right">' +
  115. '<img class="mui-media-object mui-pull-left" src="../img/file.png">' +
  116. '<div class="mui-media-body mui-ellipsis">' + name +
  117. '<p class="mui-ellipsis">' + fileSizeString + '</p></div></a>';
  118. fragmentFile.appendChild(li);
  119. }
  120. };
  121. }
  122. list.appendChild(fragmentFolder);
  123. list.appendChild(fragmentFile);
  124. }
  125. </script>
  126. </body>

  127. </html>
复制代码
其中njs-io.js文件如下所示


  1. /**
  2. * 获得sd卡根目录
  3. */
  4. function getSDRoot(){
  5. // 导入android.os.Environment类对象
  6. var environment = plus.android.importClass("android.os.Environment");
  7. // 判断SD卡是否插入
  8. if(environment.getExternalStorageState() !== environment.MEDIA_MOUNTED){
  9. plus.nativeUI.toast('没有找到SD卡');
  10. return;
  11. }
  12. console.log("获取 Android 数据目录:"+environment.getDataDirectory());
  13. console.log("获取 Android 下载/缓存内容目录:"+environment.getDownloadCacheDirectory());
  14. console.log("获取外部存储目录即 SDCard:"+environment.getExternalStorageDirectory());
  15. console.log("获取外部存储设备的当前状态:"+environment.getExternalStorageState());
  16. //console.log("获取 Android 的根目录:"+getRootDirectory());
  17. return environment.getExternalStorageDirectory();
  18. }

  19. /**
  20. * 创建文件夹
  21. * @param {Object} path
  22. */
  23. function creatFolder(path){
  24. var File = plus.android.importClass("java.io.File");
  25. var fd = new File(path);
  26. if(!fd.exists()){
  27. fd.mkdirs();
  28. plus.nativeUI.toast("创建成功");
  29. }
  30. }

  31. /**
  32. * 删除文件(文件夹)
  33. * @param {Object} path
  34. */
  35. function deleteFile(path){
  36. var File = plus.android.importClass("java.io.File");
  37. var fd = new File(path);
  38. if (fd != null && fd.exists()){
  39. fd.delete();
  40. plus.nativeUI.toast("删除成功");
  41. }
  42. }

  43. /**
  44. * 读文件大小
  45. * @param {Object} file
  46. */
  47. function readFileSize(file){
  48. var FileInputStream = plus.android.importClass("java.io.FileInputStream");
  49. var fileSize = new FileInputStream(file);
  50. var size = fileSize.available();
  51. var fileSizeString;
  52. if(size == 0){
  53. fileSizeString = "0B";
  54. }else if(size < 1024){
  55. fileSizeString = size + "B";
  56. }else if(size < 1048576){
  57. fileSizeString = (size/1024).toFixed(2) + "KB";
  58. }else if (size < 1073741824){
  59. fileSizeString = (size/1048576).toFixed(2) + "MB";
  60. }else{
  61. fileSizeString = (size/1073741824).toFixed(2) + "GB";
  62. }
  63. return fileSizeString;
  64. }

  65. /**
  66. * 读取文件夹下子文件夹及子文件数目
  67. * @param {Object} file
  68. */
  69. function readSonFilenum(file){
  70. var subFile = plus.android.invoke(file,"listFiles");
  71. var subLen = subFile.length;
  72. var obj = {
  73. subFolderNum: 0,
  74. subFileNum: 0
  75. };
  76. for(var k=0;k<subLen;k++){
  77. if(!plus.android.invoke(subFile[k],"isHidden")){
  78. if(plus.android.invoke(subFile[k],"isDirectory")){
  79. obj.subFolderNum++;
  80. }else{
  81. obj.subFileNum++;
  82. }
  83. }
  84. }
  85. return obj;
  86. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|易创云论坛 ( 吉ICP备17001024号-1 )

GMT+8, 2025-2-1 21:55 , Processed in 0.228471 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表