nodejs入门教程20:nodejs文件系统

1. 引入fs模块

在Node.js中,你可以通过以下方式引入fs模块:

const fs = require('fs');

2. 文件操作

读取文件
  • 异步读取:使用fs.readFile()方法。该方法接收文件路径和回调函数作为参数,回调函数在文件读取完成后被调用。
fs.readFile('example.txt', 'utf8', (err, data) => {
    
    
  if (err) throw err;
  console.log(data);
});
  • 同步读取:使用fs.readFileSync()方法。该方法会阻塞程序直到文件读取完成。
try {
    
    
  const data = fs.readFileSync('example.txt', 'utf8');
  console.log(data);
} catch (err) {
    
    
  console.error('Error reading file:', err);
}
写入文件
  • 异步写入:使用fs.writeFile()方法。该方法接收文件路径、要写入的内容和回调函数作为参数。
const content = 'Hello, World!';
fs.writeFile('example.txt', content, 'utf8', (err) => {
    
    
  if (err) throw err;
  console.log('File has been written successfully.');
});
  • 同步写入:使用fs.writeFileSync()方法。该方法会阻塞程序直到文件写入完成。
const content = 'Hello, World!';
fs.writeFileSync('example.txt', content, 'utf8');
console.log('File has been written successfully.');
追加内容到文件
  • 异步追加:使用fs.appendFile()方法。如果文件不存在,则会创建文件。
const additionalContent = '\nThis is additional content.';
fs.appendFile('example.txt', additionalContent, 'utf8', (err) => {
    
    
  if (err) throw err;
  console.log('Content has been appended successfully.');
});
  • 同步追加:使用fs.appendFileSync()方法。
const additionalContent = '\nThis is additional content.';
fs.appendFileSync('example.txt', additionalContent, 'utf8');
console.log('Content has been appended successfully.');

3. 目录操作

创建目录
  • 异步创建:使用fs.mkdir()方法。如果要创建多级目录,可以将recursive选项设置为true
fs.mkdir('new_directory', {
    
     recursive: true }, (err) => {
    
    
  if (err) throw err;
  console.log('Directory created!');
});
  • 同步创建:使用fs.mkdirSync()方法。
fs.mkdirSync('new_directory', {
    
     recursive: true });
console.log('Directory created!');
读取目录内容
  • 异步读取:使用fs.readdir()方法。该方法返回目录中的文件和子目录名。
fs.readdir('directory_path', (err, files) => {
    
    
  if (err) throw err;
  console.log(files);
});
  • 同步读取:使用fs.readdirSync()方法。
try {
    
    
  const files = fs.readdirSync('directory_path');
  console.log(files);
} catch (err) {
    
    
  console.error('Error reading directory:', err);
}
删除目录
  • 异步删除:使用fs.rmdir()方法。该方法只能删除空目录。要删除非空目录,可以使用fs.rm()方法并将recursive选项设置为true
// 删除空目录
fs.rmdir('empty_directory', (err) => {
    
    
  if (err) throw err;
  console.log('Directory deleted!');
});

// 删除非空目录
fs.rm('non_empty_directory', {
    
     recursive: true }, (err) => {
    
    
  if (err) throw err;
  console.log('Directory and its content deleted!');
});
  • 同步删除:使用fs.rmdirSync()方法(仅适用于空目录)或fs.rmSync()方法(可递归删除非空目录)。
// 删除空目录
fs.rmdirSync('empty_directory');
console.log('Directory deleted!');

// 删除非空目录
fs.rmSync('non_empty_directory', {
    
     recursive: true });
console.log('Directory and its content deleted!');

4. 文件与目录的信息查询

  • 检查文件或目录是否存在:使用fs.access()方法。该方法不会返回文件或目录的状态,而是根据提供的模式检查文件或目录是否存在。
fs.access('example.txt', fs.constants.F_OK, (err) => {
    
    
  if (err) {
    
    
    console.log('File does not exist!');
  } else {
    
    
    console.log('File exists!');
  }
});
  • 获取文件信息:使用fs.stat()方法。该方法返回一个包含文件或目录状态的对象。
fs.stat('example.txt', (err, stats) => {
    
    
  if (err) throw err;
  console.log(`File size: ${
      
      stats.size} bytes`);
  console.log(`Creation time: ${
      
      stats.ctime}`);
});
  • 获取目录内容:如上所述,使用fs.readdir()fs.readdirSync()方法。

5. 流式文件操作

对于大文件或需要逐步处理的文件,使用流式操作更加高效。Node.js提供了四种流:可读流(Readable)、可写流(Writable)、双向流(Duplex)和转换流(Transform)。

// 创建可读流
const readStream = fs.createReadStream('largeFile.txt', 'utf8');

// 创建可写流
const writeStream = fs.createWriteStream('largeFileCopy.txt');

// 使用管道将可读流连接到可写流
readStream.pipe(writeStream);

// 处理流事件
readStream.on('data', (chunk) => {
    
    
  console.log(`Received ${
      
      chunk.length} bytes of data.`);
});

readStream.on('end', () => {
    
    
  console.log('No more data in readable stream.');
});

writeStream.on('finish', () => {
    
    
  console.log('Write completed.');
});

6. 注意事项

  • 异步操作:Node.js的文件系统操作默认是异步的,这有助于保持应用的响应性。在可能的情况下,优先使用异步API。
  • 错误处理:在进行文件系统操作时,务必处理可能发生的错误,以避免应用崩溃。
  • 权限检查:在操作文件或目录之前,确保具有相应的权限。
  • 路径操作:使用path模块来处理文件路径,以避免因路径问题导致的错误。

通过上述教程,你可以掌握Node.js文件系统的基本操作,从而在处理文件和目录时更加得心应手。

猜你喜欢

转载自blog.csdn.net/gusushantang/article/details/143453446