新闻中心

如何利用J*aScript操作系统文件(通过File System Access API)?

2025-10-10
浏览次数:
返回列表
File System Access API 允许网页在用户授权后读写本地文件,支持 Chrome 86+ 和 Edge 95+,通过 showOpenFilePicker() 读取文件,showS*eFilePicker() 保存文件,showDirectoryPicker() 访问文件夹,createWritable() 修改文件内容,并可请求持久化权限以减少重复授权,适用于文本编辑、笔记等需本地存储的场景。

如何利用javascript操作系统文件(通过file system access api)?

J*aScript 本身在浏览器环境中无法直接访问操作系统文件系统,出于安全考虑,传统 Web API 对文件操作非常受限。但现代浏览器引入了 File System Access API,允许用户主动授权后,网页可以读取、写入和管理本地文件与文件夹。这个 API 提供了更接近原生应用的体验。

启用条件与浏览器支持

File System Access API 目前主要在基于 Chromium 的浏览器中支持(如 Chrome 86+、Edge 95+),Safari 和 Firefox 尚未支持。使用前应检查兼容性:

if ('showOpenFilePicker' in window) {
  // 可以使用 File System Access API
} else {
  alert('你的浏览器不支持此功能,请使用最新版 Chrome 或 Edge');
}

打开并读取文件

通过 showOpenFilePicker() 方法让用户选择文件,获取可操作的句柄,然后读取内容:

async function openFile() {
  try {
    const [fileHandle] = await window.showOpenFilePicker({
      types: [
        {
          description: '文本文件',
          accept: { 'text/plain': ['.txt'] }
        }
      ],
      excludeAcceptAllOption: true,
      multiple: false
    });
<pre class="brush:php;toolbar:false;">const file = await fileHandle.getFile();
const contents = await file.text();
console.log(contents);
return contents;

} catch (err) { console.error('用户取消或出错:', err); } }

说明:
- types 定义允许选择的文件类型。
- multiple: true 可允许多选。
- 获取到 fileHandle 后,调用 getFile() 得到标准 File 对象,再读取内容。

创建并保存新文件

使用 showS*eFilePicker() 让用户指定保存路径和文件名:

async function s*eFile(content) {
  const fileHandle = await window.showS*eFilePicker({
    suggestedName: 'untitled.txt',
    types: [{
      description: '文本文件',
      accept: { 'text/plain': ['.txt'] }
    }]
  });
<p>const writable = await fileHandle.createWritable();
await writable.write(content);
await writable.close();
}

流程:
- 用户选择保存位置。
- 调用 createWritable() 创建可写流。
- 写入内容后关闭流,完成保存。

读写已有文件(修改文件)

如果已有一个文件句柄,可以直接重新写入内容:

async function updateFile(fileHandle, newContent) {
  const writable = await fileHandle.createWritable();
  await writable.write(newContent);
  await writable.close();
}

注意:必须是用户先前通过选择器授予访问权限的文件,不能随意修改任意路径文件。

青泥AI 青泥AI

青泥学术AI写作辅助平台

青泥AI 360 查看详情 青泥AI

访问文件夹(目录)

使用 showDirectoryPicker() 可访问整个文件夹结构:

async function openFolder() {
  const dirHandle = await window.showDirectoryPicker();
<p>for await (const entry of dirHandle.values()) {
if (entry.kind === 'file') {
const file = await entry.getFile();
console.log(file.name, file.size);
}
}
}

你可以遍历文件夹中的文件或子目录,并对每个文件进行读取或写入操作。

持久化权限(记住访问过的文件)

一旦用户授予某个文件或文件夹访问权限,可以请求持久保留权限:

if ((await fileHandle.queryPermission({ mode: 'readwrite' })) === 'granted') {
  // 已有权限
} else {
  // 请求权限
  await fileHandle.requestPermission({ mode: 'readwrite' });
}

浏览器可能会记住用户的信任选择,减少重复授权提示。

基本上就这些。File System Access API 让 Web 应用具备了更强的本地文件操作能力,适合编辑器、配置工具、离线笔记等场景。关键是所有操作都需用户主动触发并授权,确保安全。不复杂但容易忽略的是,每次操作都要处理用户取消或异常情况。

以上就是如何利用J*aScript操作系统文件(通过File System Access API)?的详细内容,更多请关注其它相关文章!


# 如何使用  # 广州直销网站建设  # 黄岗网站推广软件免费用是  # 关键词快速排名加盟费用  # 乐从大良网站建设  # 太原网站建设要点优化  # 礼品类网站建设策划方案  # 岑巩网站优化与推广  # 国外推广网站平台有哪些  # 文章采集器附子seo  # 快手刷粉网站推广QQ  # 的是  # 如何实现  # 文本文件  # 如何用  # javascript  # 选择器  # 句柄  # 可以使用  # 已有  # win  # ai  # safari  # 工具  # access  # edge  # 浏览器  # 操作系统  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Golang如何使用const iota_Go iota常量计数器讲解  UC浏览器网页版登录入口官网 电脑版网址入口  Python Socket多播通信中指定源IP地址的实践指南  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  解决深度学习模型训练初期异常高损失与完美验证准确率问题  Typer应用中灵活处理命令行参数的令牌化与解析  小红书网页版入口链接分享 小红书官网直接进  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  Animex动漫社网入口地址 Animex动漫社网正版在线入口  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  期待已久:小米17 Ultra、小米首款NAS本月登场  Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】  msn官网入口地址手机版 msn官方网站手机最新链接  Python多版本共存与虚拟环境管理深度指南  Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  移动端XML文件怎么转换成Excel 手机和平板上的解决方案  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  Android Studio计算器C键功能异常排查与修复教程  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  J*aScript map 方法中处理循环元素为空数组的策略  mc.js游戏直达 mc.js网页免下载版本秒进地址  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  星露谷物语官网入口 星露谷物语游戏官网入口  如何将HTML表格多行数据保存到Google Sheets  css链接悬停下划线样式如何自定义_使用::after结合content和transition  c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  神庙逃亡小游戏在线玩 神庙逃亡小游戏入口  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  如何使 Jest 模拟函数默认抛出错误以提高测试效率  特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相  必由学官方网站入口 必由学学生教师共用登录通道  c++项目目录结构应该如何组织_c++工程化项目结构规范  天眼查企业查询官网入口 天眼查官方网页版查询  必由学在线入口 必由学网页版快速登录入口  c++如何实现单例设计模式_c++线程安全的单例模式写法  AO3同人作品网入口 AO3搜索引擎官网永久地址  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException 

搜索