0

0

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

夜晨

夜晨

发布时间:2025-10-10 10:58:02

|

666人浏览过

|

来源于php中文网

原创

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

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

JavaScript 本身在浏览器环境中无法直接访问操作系统文件系统,出于安全考虑,传统 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 对象,再读取内容。

创建并保存新文件

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

立即学习Java免费学习笔记(深入)”;

async function saveFile(content) {
  const fileHandle = await window.showSaveFilePicker({
    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();
}

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

TTSMaker
TTSMaker

TTSMaker是一个免费的文本转语音工具,提供语音生成服务,支持多种语言。

下载

访问文件夹(目录)

使用 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 应用具备了更强的本地文件操作能力,适合编辑器、配置工具、离线笔记等场景。关键是所有操作都需用户主动触发并授权,确保安全。不复杂但容易忽略的是,每次操作都要处理用户取消或异常情况。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1058

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

840

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1733

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

397

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

1038

2025.04.24

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

492

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

382

2023.10.25

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

420

2023.08.08

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号