fs(文件系统——文件操作)

读取文件:

const fs = require("fs");

// 异步读取
fs.readFile('a.js', function (err, data) {
   console.log(data.toString());
});

// 同步读取
let data = fs.readFileSync('a.js');
console.log(data.toString());

写入文件 :

const fs = require("fs");

//追加写入
fs.writeFile('a.js', '我是内容', {flag:'a'}, function(err) {
    console.log("写入完成");
});

//覆盖写入
fs.writeFile('a.js', '我是内容', {flag:'w'}, function(err) {
    console.log("写入完成");
});

 获取文件状态对象:

const fs = require("fs");

fs.stat('a.js', function (err, stats) {
    console.log('文件状态对象',stats); 
    stats.atimeMs
    // 表明上次访问此文件的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.mtimeMs
    // 表明上次修改此文件的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.ctimeMs
    // 表明上次更改文件状态的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.birthtimeMs
    // 表明此文件的创建时间的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.atime
    // 表明上次访问此文件的时间戳。

    stats.mtime
    // 表明上次修改此文件的时间戳。

    stats.ctime
    // 表明上次更改文件状态的时间戳。

    stats.birthtime
    // 表示此文件的创建时间的时间戳。
});

监听文件(是否改变):

const fs = require('fs');

//监听文件:
fs.watch('a.text',(eventType,fileName)=>{
    console.log("文件修改即触发本回调函数");
});

//监听目录:{recursive:true}表示监听该目录和子孙目录,还有它们的文件
fs.watch('目录名', {recursive:true}, (eventType,fileName)=>{
    console.log("本目录和子孙目录有增删文件,或它们的文件有修改,都会触发本回调函数");
});

//监听文件:
fs.watchFile('a.text', {persistent:true}, (current,previous)=>{
    console.log('当前的文件状态对象',current);
    console.log('改变前的文件状态对象',previous);
})

删除文件:

const fs = require('fs');

fs.unlink('a.js', (err)=>{
    console.log('删除完成');
})

如果要读取文件中指定字节的内容,则需要以下更复杂的操作:

1、打开文件,获取“文件描述符”:fs.open(path, flags[, mode], callback);

2、在打开文件的回调函数中,用“文件描述符”读取文件指定的内容:fs.read(fd, buffer, offset, length, position, callback);

举个栗子:

//比如:a.text,文件内容:abcdefg hijklmn opqrst uvwxyz
const fs = require('fs');

function open(){
    return new Promise(res=>{
        fs.open('a.text','r',(err,fd)=>{
            res(fd);
        });
    });
}
function read(fd){
    return new Promise(res=>{
        fs.read(fd, Buffer.alloc(15), 0, 15, null, (err,bytesRead,buffer)=>{
            res(buffer);
        });
//fs.read(文件描述符, 空缓冲器, 读取到的数据从缓冲器0索引处开始写入, 读取文件15字节, 从文件何处开始读取, (err, 读取到的字节数, 存有读取数据的缓冲器)=>{});
    });
}

(async ()=>{
    let fd = await open();
    let bf1 = await read(fd);
    let bf2 = await read(fd);
    fs.close(fd, err=>{});  //关闭打开的文件
    console.log(bf1.toString()); //abcdefg hijklmn
    console.log(bf2.toString()); // opqrst uvwxyz
})();

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFS是Hadoop分布式文件系统,它提供了Java API来进行文件读写操作。在HDFS中,文件被分成多个块并存储在不同的节点上,因此需要使用分布式文件系统的API来进行文件读写操作。 HDFS Java API提供了以下几个类来进行文件读写操作: 1. FileSystem:表示一个文件系统对象,可以通过它来获取文件系统的配置信息、创建文件、删除文件操作。 2. Path:表示一个文件或目录的路径。 3. FSDataInputStream:表示一个输入流,可以用来读取HDFS中的文件。 4. FSDataOutputStream:表示一个输出流,可以用来向HDFS中写入数据。 下面是一个简单的示例代码,演示如何使用HDFS Java API进行文件读写操作: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; public class HdfsExample { public static void main(String[] args) throws Exception { // 创建一个Configuration对象,用于获取Hadoop配置信息 Configuration conf = new Configuration(); // 获取HDFS文件系统对象 FileSystem fs = FileSystem.get(conf); // 创建一个Path对象,表示要读取的文件路径 Path inputPath = new Path("/input/test.txt"); // 创建一个FSDataInputStream对象,用于读取文件 FSDataInputStream in = fs.open(inputPath); // 读取文件内容 byte[] buffer = new byte[1024]; int len = in.read(buffer); while (len > 0) { System.out.write(buffer, 0, len); len = in.read(buffer); } // 关闭输入流 in.close(); // 创建一个Path对象,表示要写入的文件路径 Path outputPath = new Path("/output/test.txt"); // 创建一个FSDataOutputStream对象,用于写入文件 FSDataOutputStream out = fs.create(outputPath); // 写入文件内容 String content = "Hello, HDFS!"; out.write(content.getBytes()); // 关闭输出流 out.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值