news 2026/2/2 10:09:25

Electron 文件系统与数据存储

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Electron 文件系统与数据存储

Electron 中的文件系统与数据存储

Electron 作为基于 Chromium 和 Node.js 的桌面应用框架,允许开发者直接访问本地文件系统和多种数据持久化方式。这使得 Electron 应用可以像传统桌面软件一样处理文件读写、配置保存和数据管理。下面详细说明常见方式。

1.文件系统操作(使用 Node.js 的 fs 模块)

Electron 的主进程(main process)可以直接使用 Node.js 的fs模块进行文件操作,包括读取、写入、删除、创建目录等。这是最强大的方式,适用于处理任意文件。

  • 关键 API

    • const fs = require('fs');import fs from 'fs';
    • 常用方法:
      • fs.readFile(path, 'utf8', callback):读取文件。
      • fs.writeFile(path, data, callback):写入文件。
      • fs.mkdir(path, { recursive: true }, callback):创建目录。
      • fs.existsSync(path):检查文件/目录是否存在。
  • 推荐存储路径
    使用 Electron 的app.getPath(name)获取系统推荐目录,避免跨平台问题和权限限制。

    • app.getPath('userData'):最常用,用于存储应用配置和用户数据(Windows:C:\Users\<user>\AppData\Roaming\<App Name>;macOS:~/Library/Application Support/<App Name>;Linux:~/.config/<App Name>)。
    • 其他:'documents''desktop''temp'等。
  • 示例(主进程中读写 JSON 文件)

    const{app}=require('electron');constpath=require('path');constfs=require('fs');constdataPath=path.join(app.getPath('userData'),'config.json');// 写入fs.writeFileSync(dataPath,JSON.stringify({key:'value'}));// 读取letdata={};if(fs.existsSync(dataPath)){data=JSON.parse(fs.readFileSync(dataPath,'utf8'));}
  • 渲染进程访问
    渲染进程默认禁用 Node.js(安全考虑),需通过预加载脚本(preload.js)暴露 IPC 接口,或使用contextBridge安全暴露 fs 操作。

  • 注意事项

    • 处理错误、路径编码(使用path.join)。
    • 对于敏感数据,可结合safeStorage模块加密字符串。
    • 打包后(ASAR 格式),某些 fs 操作需注意临时提取。
2.数据持久化方式

Electron 支持多种存储方案,根据数据量和复杂度选择:

方式适用场景优点缺点示例库/模块
localStorage小量键值对(如用户偏好)简单,像 Web API仅字符串、容量有限、易受 XSS直接在渲染进程使用
IndexedDB中等结构化数据、Blob 等支持复杂查询、异步浏览器 API、渲染进程为主直接使用或 PouchDB
JSON 文件 + fs配置、用户设置灵活、可读性好需手动读写、管理并发手动实现
electron-store推荐:简单配置、默认值、迁移自动处理路径、支持 schema、加密额外依赖npm i electron-store
SQLite大量关系型数据查询强大、嵌入式需要库(如 better-sqlite3)better-sqlite3或 RxDB
其他嵌入式 DBNoSQL 或复杂查询高性能学习曲线NeDB、PouchDB、RxDB
  • 推荐首选:electron-store
    它基于 JSON 文件存储在userData目录,API 简洁,支持嵌套属性、默认值和模式验证。
    constStore=require('electron-store');conststore=newStore();store.set('unicorn','🦄');console.log(store.get('unicorn'));// 🦄// 支持嵌套store.set('foo.bar',true);console.log(store.get('foo'));// { bar: true }
3.安全性与最佳实践
  • 上下文隔离:启用contextIsolation: true,通过ipcMain/ipcRenderercontextBridge通信,避免直接暴露 Node.js 到渲染进程。
  • 加密敏感数据:使用safeStorage模块(OS 级加密)。
  • 跨平台兼容:始终用app.getPath获取路径,避免硬编码。
  • 打包考虑:使用 electron-builder 等工具,确保 userData 目录不受影响。
  • 大型数据:避免污染 userData(如大缓存),可自定义 sessionData 路径。

这些方式让 Electron 应用能高效处理本地文件和数据。如果需要具体代码示例或某个场景的实现,可以提供更多细节!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/1 13:30:19

Electron 实战项目

以下是一些非常适合学习 Electron 的实战项目&#xff0c;它们从简单到复杂&#xff0c;覆盖了 Electron 开发中几乎所有核心知识点和常见场景。这些项目在 2024–2025 年仍然是社区公认的优秀学习材料&#xff0c;且很多都有活跃的更新。 序号项目名称技术栈 / 特点学习价值&…

作者头像 李华
网站建设 2026/1/30 17:27:59

Open-AutoGLM解密异常频发?(企业级容错架构设计实践)

第一章&#xff1a;Open-AutoGLM 数据解密异常处理在 Open-AutoGLM 框架中&#xff0c;数据解密是模型推理前的关键步骤。由于加密数据可能来自不同源或使用不一致的密钥策略&#xff0c;解密过程中常出现格式错误、密钥不匹配或完整性校验失败等异常情况。为保障系统稳定性&am…

作者头像 李华
网站建设 2026/2/2 22:35:54

你还在用传统加密?Open-AutoGLM的这4个优势已彻底改写行业规则

第一章&#xff1a;Open-AutoGLM 数据加密算法选择在构建 Open-AutoGLM 系统时&#xff0c;数据安全是核心考量之一。为确保模型训练数据、推理请求及用户信息的机密性与完整性&#xff0c;必须选择合适的加密算法。系统采用分层加密策略&#xff0c;针对静态数据、传输中数据和…

作者头像 李华
网站建设 2026/2/1 7:01:28

企业级城市垃圾分类管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着城市化进程的加速和人口规模的不断扩大&#xff0c;城市垃圾问题日益严重&#xff0c;传统的垃圾处理方式已经无法满足现代社会的需求。垃圾分类作为垃圾减量化、资源化和无害化的重要手段&#xff0c;已成为城市管理的重要课题。然而&#xff0c;当前许多城市的垃圾分…

作者头像 李华
网站建设 2026/2/2 12:45:33

为什么你的系统总被Open-AutoGLM误封?一文看懂白名单配置核心要点

第一章&#xff1a;为什么你的系统总被Open-AutoGLM误封&#xff1f;Open-AutoGLM 是当前广泛部署的自动化内容安全检测框架&#xff0c;常用于识别潜在的恶意请求或异常行为。然而&#xff0c;许多开发者在集成 AI 接口时频繁遭遇系统被误封的问题&#xff0c;其根源往往并非恶…

作者头像 李华