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

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: fa
lse
});
<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写作辅助平台
360
查看详情
访问文件夹(目录)
使用 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


2025-10-10
浏览次数:次
返回列表
lse
});
<pre class="brush:php;toolbar:false;">const file = await fileHandle.getFile();
const contents = await file.text();
console.log(contents);
return contents;