如何使用 javascript 迭代文件系统目录和文件?

2024-05-13

我正在使用 Javascript 编写一个应用程序,该应用程序将与 Phonegap 一起使用来制作 Android 应用程序。我正在使用 Phonegap File API 来读取目录和文件。相关代码如下所示:

document.addEventListener("deviceready", onDeviceReady, false);

// PhoneGap is ready
//
function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
}

function onFileSystemSuccess(fileSystem) {
    fileSystem.root.getDirectory("/sdcard", {create: false, exclusive: false}, getDirSuccess, fail);
}

function getDirSuccess(dirEntry) {
    // Get a directory reader
    var directoryReader = dirEntry.createReader();

    // Get a list of all the entries in the directory
    directoryReader.readEntries(readerSuccess,fail);
}

var numDirs = 0;
var numFiles = 0;

function readerSuccess(entries) {
    var i;
    for (i=0; i<entries.length; i++) 
    {
        if(entries[i].isFile === true)
        {
        numFiles++;
        entries[i].file(fileSuccess,fail);
        }
        else if (entries[i].isDirectory === true)
        {
        numDirs++;
        getDirSuccess(entries[i]);
        }
    }
}

所以到目前为止,该程序运行良好。读取器将读取 /sdcard 目录的内容。如果遇到文件,它将调用 fileSuccess (为了简洁起见,我在代码中排除了该文件),如果遇到另一个目录,它将再次调用 getDirSuccess。我的问题是:我如何知道整个 /sdcard 目录何时被读取?我想不出一种在不多次遍历 /sdcard 目录的情况下完成此操作的好方法。任何想法表示赞赏,并预先感谢您!


+1是一个好问题,因为无论如何我自己都必须这样做。我会使用旧的 setTimeout 技巧。一旦取消不再发生,您就知​​道您已经完成并可以触发您的事件,但只需确保它只触发一次。

这就是我的意思,我将变量命名为 long 只是为了更具可读性(不是我的风格)......

// create timeout var outside your "readerSuccess" function scope
var readerTimeout = null, millisecondsBetweenReadSuccess = 100;

function readerSuccess(entries) {
    var i = 0, len = entries.length;
    for (; i < len; i++) {
        if (entries[i].isFile) {
            numFiles++;
            entries[i].file(fileSuccess,fail);
        } else if (entries[i].isDirectory) {
            numDirs++;
            getDirSuccess(entries[i]);
        }
        if (readerTimeout) {
            window.clearTimeout(readerTimeout);
        }
    }
    if (readerTimeout) {
        window.clearTimeout(readerTimeout);
    }
    readerTimeout = window.setTimeout(weAreDone, millisecondsBetweenReadSuccess);
}

// additional event to call when totally done
function weAreDone() {
   // do something
}

因此,其中的逻辑是,当您阅读内容时,您会不断取消调用“weAreDone”函数。不确定这是否是最好的方法或更有效,但考虑到适当的“millisecondsBetweenReadSuccess”,它不会导致超过一个循环。

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

如何使用 javascript 迭代文件系统目录和文件? 的相关文章

  • Android - 带图像的按钮 - 禁用按钮时图像变暗

    在 Android 中 我有一个包含图像和文本的按钮 禁用该按钮时 文本会自动变灰 但图像保持不变 当按钮被禁用时是否可以使图像变暗而不需要两个单独的图像 在您的代码中 您还可以使用彩色滤光片 http developer android
  • 获取 Firebase AngularFire 中项目的索引 ID

    这里提出了类似的问题 但接受的答案并没有真正回答这个问题 使用 AngularFire 是否可以创建关系型数据库 或者访问 UniqueID https stackoverflow com questions 16879484 using
  • Android:调用超类的原因?

    我正在查看 Android 开发人员网站上的记事本教程 我有一个关于调用活动超类的重写函数的问题 例如 public class Notepadv3 extends ListActivity Override public boolean
  • 如何在 vuejs 中防止/停止点击传播

    我有一个递归列表 树 每个元素都有一个 click sayHello el id 现在的问题是 因为它是一个嵌套列表 例如 list element 0 01 list el 1 01 list el 2 01 list el 1 02 l
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • 如何按日期升序对对象进行排序?

    如果我有一个对象列表 var objectList LIST OF OBJECT each object列表中包含三个属性 name date gender 如何按 对列表中的对象进行排序date 属性升序 the date 属性包含字符串
  • RecyclerView onClick notificationItemRemoved 不会触发 onBindView

    I use notifyItemRemoved 方法我想更改其他剩余项目 但该方法没有触发onBindView 方法 除了使用notifyDataSetChanged 我想要附带的动画notifyItemRemoved method 如果您
  • 如何检查字符串中是否存在阿拉伯字符(javascript)

    如何用javascript语言检查字符串中是否存在阿拉伯字符 根据维基百科 http en wikipedia org wiki Basic Multilingual Plane 阿拉伯字符属于 Unicode 范围 0600 06FF 因
  • d3 序数尺度的映射

    我正在使用 D3 的序数比例将数字映射到颜色 我用过这个 color d3 scale ordinal range 1f77b4 ff7f0e 2ca02c d62728 9467bd 8c564b e377c2 domain 0 6 co
  • 使用Doctype让scrollTop返回0,为什么?

    当我将此 Doctype 放入我的文档中时document body scrollTop返回零 这是为什么 当您使用该 Doctype 时 您会将每个当前浏览器放入所谓的几乎标准模式 http hsivonen iki fi doctype
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • Corebluetooth 方法 scanForPeripheralsWithServices 在任何设备中都不适用于我。所有 github 示例均不适用于我的设备 ipod touch

    我正在开发蓝牙相关的应用程序 但我没有取得任何成功 在我的应用程序中 我想将我的 iDevice 与任何其他正在扫描的蓝牙设备连接 但使用 CBCentralManager 方法 scanForPeripheralsWithServices
  • Cordova 文件传输到节点服务器

    我正在使用 ng Cordova fileTransfer 插件尝试将用户相机胶卷中的照片上传到 Node Express 服务器 我正在获取照片的本地 URI 并尝试将其传递给插件 如下所示 cordovaFileTransfer upl
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 如何在flutter app android中添加Startapp广告?

    我想用其他广告更改 AdMob 广告 一些个人问题 如何在flutter app android中添加Startapp广告 有什么方法可以将启动广告添加到我的 flutter 应用程序 android 中 StartApp 现已更名为 St
  • Android 中应用程序在后台运行时如何显示闪屏?

    我的应用程序有一个启动屏幕 无法避免它 因为这是出于品牌原因 我想屏蔽用户界面并在后台显示启动屏幕 就像银行应用程序那样 我应该覆盖 MainActivity 中视图的 onPause 和 onResume 吗 显现
  • 使用 Ant 构建 Android 库项目

    我在使用 ant 构建 Android 库项目时遇到问题 当我尝试跑步时ant release 它说Target release does not exist in the project MyProject 然后我假设库可能无法通过发布
  • 掩码输入数字 - 百分比

    如何通过 jQuery 创建具有百分比的数字掩码输入 我是否让输入仅接受三个数字 并在用户完成输入时在数字后添加百分号 keyup 我不使用插件 例子 1 Or 30 Or 99 Or 100 Or 200
  • 在 Nest.js 中发送之前如何格式化响应?

    我按照文档进行操作 并能够添加用于响应映射的拦截器 我想要一致的 json 格式输出作为响应 我怎样才能用拦截器或其他比这种方法更好的方法来实现这一点 statusCode 201 message Custom Dynamic Messag
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐

  • 图标和导航视图之间的左边距

    我必须在图标和图标之间添加左边距NavigationView 如下图中箭头所示 我知道根据谷歌规范 这个边距必须有16dp但我需要改变它 我努力了
  • Unix 纪元时间转 Java Date 对象

    我有一个包含以下内容的字符串UNIX 纪元时间 https en wikipedia org wiki Unix time 我需要将其转换为 Java Date 对象 String date 1081157732 DateFormat df
  • 使用 jquery 时出现控制台错误 - Uncaught TypeError: Object # has no method

    我尝试使用以下 js 添加类或 css 样式 但出现控制台错误 var i 0 question i addClass show 收到以下控制台日志错误 Uncaught TypeError Object has no method add
  • C++ 克隆惯用语中协变返回类型的用处?

    通常的克隆习惯使用协变返回类型 struct Base virtual Base clone struct Derived public Base Derived clone 我读过一些内容 大意是协变返回类型是 C 后来添加的 较旧的编译
  • 获取传单地图放大时的标记列表

    我是传单新手 我已按照以下步骤设置了地图https github com Asymmetrik ngx leaflet https github com Asymmetrik ngx leaflet 我正在尝试获取地图放大区域中的标记列表
  • 自定义 OpenVPN iOS 客户端 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个自定义 iOS OpenVPN 客户端 我找到了这个原生 OpenVPN 客户端核心源码https staging op
  • 通过ajax POST提交两次表单

    插入到mysql using php通过文件调用AJAX 前insert语句php代码执行select查询到查找重复记录并继续insert statement Issue 从ajax调用php文件时 它执行了两次并得到作为重复记录的响应 好
  • 在 Chrome 扩展中创建隐藏的 iframe

    是否可以在 google chrome 扩展中的 background html 页面上创建一个 iframe 并让它向网站发出请求 我不确定该扩展程序到底是如何工作的 chrome 会自动忽略所有显示标签还是会以不可见的方式运行它 它会正
  • 使用经度和纬度查找给定距离内的所有附近客户

    我有一个包含客户经度和纬度的数据库 我有一个搜索表单 用户将在其中输入日志 纬度 距离下拉列表包含 50 英里 100 英里 当用户单击搜索时 我想编写一个 linq 查询从数据库中获取此距离半径内的所有客户 如何使用 C 和 linq 来
  • jQuery UI 选项卡 - 将选项卡绑定到同一页面上的链接

    我正在尝试将选项卡绑定到同一页面上的链接 但我是 jQuery 的新手 需要一些帮助 我的选项卡使用 jQuery UI 站点的代码 但是 如何绑定同一页面侧边栏中的链接呢
  • 在 git 子模块中签出分支

    如何从子模块内更改分支 当我跑步时git branch从子模块内 我看到以下输出 gt git branch HEAD detached from 229a7b2 master 我如何将自己置于一个新的分支上 喜欢development 只
  • 将命令行参数传递给 emscripten 生成的应用程序

    当使用 Emscripten 编译 C 程序时 会生成一个 HTML 页面来显示程序的结果 我想知道如何将命令行参数传递给应用程序 例如 对于原始的 C 程序 它是 bfs 32 1 我能够通过向生成的 html 文件添加一行来传递命令行参
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • Mongoid 命名范围比较同一文档中的两个时间字段

    我需要在 Mongoid 中创建一个命名范围来比较同一文档中的两个时间字段 例如 scope foo where gt updated at gt gt checked at 这显然不会像它对待的那样起作用 checked at作为一个符号
  • MySQL:查询中周数的周日期范围

    我有一个看起来像这样的数据库表 id clock info 1 1262556754 some info 2 1262556230 some other info 3 1262556988 and another 4 1262555678
  • Haskell - 用防护罩替换外壳

    我想知道在这部分代码中是否可以用守卫替换 case 语句 firstFunction String gt Maybe MyType secondFunction MyType gt Integer myFunction String gt
  • 保存和恢复陷阱状态?管理多个陷阱处理程序的简单方法?

    有什么好的方法可以覆盖bash陷阱处理程序不会永久破坏可能已设置或尚未设置的现有处理程序 动态管理任意陷阱例程链怎么样 有没有办法保存陷阱处理程序的当前状态 以便以后可以恢复 在 Bash 中保存和恢复陷阱处理程序状态 我将提交以下堆栈实现
  • Tweepy 流式传输错误

    我正在尝试使用 tweepy 和 textblob 分析推文的情绪 我执行了 pip install tweepy 并且安装成功 但出现以下错误 错误信息 文件 C Users joshey Desktop sent py 第 2 行 位于
  • Xamarin 无法从异步获取实例

    我编写了一个通过蓝牙连接到 ESP32 的 Xamarin Forms 应用程序 现在我想从 MainPage xaml 页面的 CustomControl JoystickControl 获取值 我已经这样尝试过了 MainPage xa
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv