访问文件夹

news2024/11/19 5:27:30

访问文件夹并读取文件内容

将展示如何使用 JavaScript 中的 showDirectoryPicker() 方法来访问文件夹,并读取文件的内容。

HTML 结构

首先,需要一个按钮来触发打开文件夹的操作:

<button>打开文件夹</button>

还需要一个段落元素用于显示文件的内容:

<p></p>

JS 代码

接下来,使用 JavaScript 来处理按钮的点击事件,并访问文件夹。代码如下所示:

const btn = document.querySelector("button");
const p = document.querySelector("p");

btn.addEventListener("click", async () => {
  try {
    const handler = await showDirectoryPicker();
    const root = await processHandler(handler);
    console.log(root); // 输出索引目录下的文件和文件夹

    // 输出文件内容,标准的文件上传时样子
    const file = await root.children[3].children[0].getFile(); // 需要找到这个文件夹下的文件
    const reader = new FileReader();

    reader.onload = (e) => {
      console.log(e.target.result);
      p.innerHTML = e.target.result;
    };

    // 当做存文本读取
    reader.readAsText(file, "utf-8");
  } catch (error) {
    console.log(error.message);
  }
});

async function processHandler(handler) {
  if (handler.kind === "file") return handler;

  handler.children = [];
  // 获取文件夹所有内容
  const iterator = await handler.entries();

  for await (const [name, subHandler] of iterator) {
    const subHandle = await processHandler(subHandler);
    // 处理文件夹中内容
    handler.children.push(subHandle);
  }

  return handler;
}

在上述代码中,通过 document.querySelector("button") 获取到按钮元素,并添加了一个点击事件的监听器。

当按钮被点击时,使用 showDirectoryPicker() 方法来打开文件夹选择器。该方法返回一个处理器(handler),用于处理所选文件夹的操作。

然后,调用 processHandler() 函数来处理文件夹的内容。该函数首先判断处理器的类型,如果是文件(kind === "file"),则直接返回该处理器。

如果是文件夹,则初始化一个空数组 handler.children,用于存储文件夹下的子文件和子文件夹。

接下来,使用 await handler.entries() 获取文件夹下的所有内容,并通过 for await...of 循环遍历每个文件或文件夹。对于每个子文件或子文件夹,递归调用 processHandler() 函数,并将返回的处理器存储在 handler.children 数组中。

最后,返回处理器 handler

在读取文件内容的部分,使用了 getFile() 方法来获取文件对象,并创建了一个 FileReader 对象来读取文件的内容。通过设置 reader.onload 事件处理程序,可以在文件读取完成后获取文件内容,并将其输出到控制台和段落元素中。

通过这段代码,可以实现打开文件夹、访问文件夹内容,并读取文件的内容。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

限频差分探头N2060Apro

N2060Apro 差分探头提供一个安全的仪器给所有的示波器使用&#xff0c;它可以转换由高输入的差动电压进入一个低电压(≤7V)&#xff0c;并且显示波形在示波器上&#xff0c;使用频宽高达 200MHz&#xff0c;非常适合大电力测试、研发、维修使用。差分探头输出标示是设计在操作示…

系统大前端学习路线

第一阶段&#xff1a;HTML/CSS3以及工具部分 HTML和CSS用来制作网页&#xff0c;利用盒子模型&#xff0c;浮动&#xff0c;定位&#xff0c;flex布局进行网页布局&#xff0c;网页颜色&#xff0c;字体&#xff0c;背景&#xff0c;变换&#xff0c;过渡&#xff0c;动画等增…

flutter 创建插件

资料&#xff1a; flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…

怎么多号发圈和批量加好友?

你知道怎么多号发圈和批量加好友吗&#xff1f; 我们都知道&#xff0c;微信号多&#xff0c;管理起来是一件相当麻烦的事。 那发圈和加好友&#xff0c;多号的话&#xff0c;那是相当大的工作量&#xff0c;那有没有什么办法可以多号同时进行发圈和加人吗&#xff1f; 当然有的…

【Java实战】Mybatis plus根据数据库表自动生成代码

首先生成一个maven项目&#xff0c;不会生成的参考 【Java实战】创建第一个Springboot项目Hello worldhttps://blog.csdn.net/forgetmiss/article/details/133889733 &#xff08;写的过程中遇到过的问题&#xff1a;mybatis-plus 生成controller中的代码&#xff0c; Reques…

Bootstrap-- 内容

Bootstrap4 - 中文文档 - 内容 处理不同尺寸下的图片的处理&#xff0c;避免资源浪费&#xff01;&#xff01;&#xff01;

liunx下软链接和硬链接的用法

什么是软链接&#xff08;类似快捷方式&#xff09;&#xff1a; 符号连接&#xff08;Symbolic Link&#xff09;&#xff0c;也叫软连接。 软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中&#xff0c;文件实际上是一个文本文件&#xff0c…

怎么压缩证件照到200k以下?教你在线压缩图片指定kb

新一年的国考报名开始了&#xff0c;相信许多小伙伴还在发愁报名信息资料上传的问题&#xff0c;比如提交证件照时会要求具体的图片kb大小&#xff0c;本文就来教大家怎么快速图片压缩指定大小&#xff08;https://www.yasuotu.com/imagesize&#xff09;&#xff0c;而且还不需…

GitKraken for Mac:强大且跨平台的Git客户端

如果你正在寻找一个强大、直观且跨平台的Git客户端&#xff0c;那么GitKraken绝对值得你考虑。在本文中&#xff0c;我们将详细介绍GitKraken的各项功能和优势&#xff0c;以帮助你了解它如何帮助你更有效地管理和提交代码。 GitKraken是一款真正的跨平台工具&#xff0c;可以在…

2024年关于湖北省建筑安全员B证报考你需要了解

2024年关于湖北省建筑安全员B证报考你需要了解 建筑安全员B证指的是建设厅三类人员建安B证&#xff0c;很多人对于B证报考不是很了解&#xff0c;对于安全员B报考条件、报考流程、报考时间、报考地区等事项叙后尘告诉你们。 湖北建筑安全员B证报考条件-建安B证 1.你的二级建造师…

(2022|ECCV,文本图像视频,3D 邻域注意,3D 稀疏注意)NÜWA:神经视觉世界创建的视觉合成预训练

NWA: Visual Synthesis Pre-training for Neural visUalWorld creAtion 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 2.1. 视觉自回归模型 2.2. 视觉…

HugeGraph1.0.0部署,吐槽一下Hubble的数据导入 Bug

背景 HugeGraph 安装部署了最新版本1.0.0&#xff0c;发现它的 Web 工具 Hubble 有一个大 Bug。数据导入的时候&#xff0c;配置节点属性映射这个选项时&#xff0c;下拉框只有一个选项&#xff0c;但实际上&#xff0c;元数据配置中的属性有3个&#xff0c;这个 Bug 是怎么产…

Python开发之二维数组空缺值的近邻填充

Python开发之二维数组空缺值的填充 1 实现一&#xff0c;任意位置填充2 实现二&#xff0c;填充内部3 实现三&#xff0c;只填充边缘&#xff0c;不包括四个角 前言&#xff1a;主要实现二维数据里面某一个数据的缺失&#xff0c;用缺失的近邻数据进行均值填充&#xff0c;可以…

oracle 错题汇总

在Oracle数据库中&#xff0c;如果你在GROUP BY子句中指定了列&#xff0c;那么SELECT子句中除了聚合函数外的每个列都必须在GROUP BY子句中列出。 1.查询出每个部门的编号、名称、位置、部门人数、平均工资。 SELECT d.deptno AS "部门编号", d.dname AS &…

Jmeter(四):请求默认值元件应用,正则表达式提取器元件讲解

Jmeter请求默认值元件应用 HTTP请求默认值 在公司内部进行测试的时候&#xff0c;一般测试环境访问的接口地址&#xff08;服务器名称 或IP&#xff09;、端口、协议一般都是不变的&#xff0c;但http请求取样器每个请求都要求写一遍 这些信息&#xff0c;在实际HTTP请求取样…

数据驱动娱乐的未来:揭秘爱奇艺如何利用Apache Spark实现个性化推荐和内容分析

Apache Spark 在爱奇艺的现状与应用 Apache Spark 是爱奇艺大数据平台的核心组件&#xff0c;被广泛应用于数据处理、数据同步和数据查询分析等关键场景。在数据处理方面&#xff0c;爱奇艺通过数据开发平台支持开发者提交 Spark Jar 包任务或 Spark SQL 任务&#xff0c;进行…

预防电压波动带来的灾难:瞬态电压抑制器的作用和原理 | 百能云芯

在当今数字化时代&#xff0c;电子设备的应用已经无处不在&#xff0c;从个人电脑到智能手机&#xff0c;再到工业自动化系统和通信设备&#xff0c;这些设备的正常运行对于我们的生活和工作至关重要。然而&#xff0c;电子设备常常会受到来自电力系统的电压波动和瞬态电压的威…

Win+L不能锁屏

1、运行WINR&#xff0c;输入REGEDIT&#xff0c;运行注册表&#xff1a; 2、CTRLF&#xff0c;输入查找DisableLockWorkstation 3、双击这个&#xff0c;点十进制&#xff0c;输入0点确认即可。

复制粘贴(一):copy paste 事件

页面内容如下&#xff1a; <body><div id"container1"><p>阳光<input type"button" value"按钮" /><span>hello</span></p></div> </body>选择所有内容&#xff1a; user-select 按钮左…

低代码如何赋能实体经济走向数实融合

数字工厂、智慧园区、智慧社区、数字乡村、智慧校园、数字化管理平台……当前&#xff0c;各行各业正在全面拥抱数字化。“数实融合”的浪潮持续高涨&#xff0c;企业数字化转型的呼声也不断走高。然而&#xff0c;当前实体经济和数字经济融合不全&#xff0c;数字技术未能深度…