当前位置:首页 > JavaScript

用js实现读写

2026-02-02 19:40:20JavaScript

使用 JavaScript 读写文件

JavaScript 可以通过不同的方式实现文件读写操作,具体方法取决于运行环境(浏览器或 Node.js)。

浏览器环境下的文件读写

在浏览器中,出于安全考虑,JavaScript 不能直接访问文件系统。需要通过用户交互(如文件选择)或使用现代浏览器提供的 File System Access API 来实现。

读取文件内容

用js实现读写

// 通过 input 元素读取文件
const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (event) => {
  const file = event.target.files[0];
  const reader = new FileReader();

  reader.onload = (e) => {
    const content = e.target.result;
    console.log(content);
  };

  reader.readAsText(file);
});

写入文件内容

// 使用 Blob 和 URL.createObjectURL 创建下载链接
function saveFile(content, filename) {
  const blob = new Blob([content], { type: 'text/plain' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = filename;
  a.click();
  URL.revokeObjectURL(url);
}

// 调用示例
saveFile('Hello World', 'example.txt');

Node.js 环境下的文件读写

Node.js 提供了内置的 fs 模块,可以更直接地进行文件操作。

用js实现读写

同步方式读写文件

const fs = require('fs');

// 同步读取文件
try {
  const data = fs.readFileSync('input.txt', 'utf8');
  console.log(data);
} catch (err) {
  console.error(err);
}

// 同步写入文件
try {
  fs.writeFileSync('output.txt', 'Hello Node.js', 'utf8');
} catch (err) {
  console.error(err);
}

异步方式读写文件

const fs = require('fs').promises;

// 异步读取文件
async function readFile() {
  try {
    const data = await fs.readFile('input.txt', 'utf8');
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

// 异步写入文件
async function writeFile() {
  try {
    await fs.writeFile('output.txt', 'Hello Async', 'utf8');
  } catch (err) {
    console.error(err);
  }
}

readFile();
writeFile();

使用现代 File System Access API

较新的浏览器支持 File System Access API,提供更强大的文件系统访问能力。

// 请求文件句柄
async function getFile() {
  const handle = await window.showOpenFilePicker();
  const file = await handle[0].getFile();
  const content = await file.text();
  console.log(content);
}

// 保存文件
async function saveFile() {
  const handle = await window.showSaveFilePicker({
    suggestedName: 'example.txt',
    types: [{
      description: 'Text Files',
      accept: { 'text/plain': ['.txt'] }
    }]
  });

  const writable = await handle.createWritable();
  await writable.write('Hello FS Access API');
  await writable.close();
}

注意事项

  1. 浏览器环境下的文件操作需要用户主动触发,不能自动执行
  2. Node.js 文件操作需要文件系统权限
  3. File System Access API 目前仅在部分浏览器中完全支持
  4. 处理大文件时应使用流式操作避免内存问题

以上方法覆盖了 JavaScript 在不同环境下实现文件读写的主要方式,可根据具体需求选择适合的方案。

标签: js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClip…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…