继续请教老师js输出到文本问题

老师的下面这个代码,非常好用。
我现在的source是从一个1.txt文件中调用的。
我希望:
1.把js执行的results写入到2.txt中,是追加写入。
2.最后清空1.txt文件。
请问怎样写能实现。万分感谢。

const THRESHOLD = 3;

let source = `
  127.0.0.1
  127.0.0.2
  127.0.0.2
  127.0.0.3
  127.0.0.1
  127.0.0.1
  127.0.0.1
  127.0.0.3
  127.0.0.1
  127.0.0.4
  127.0.0.4
  127.0.0.4
`;

let results = source
  .split('\n')          // 按换行符分割
  .map(e => e.trim())   // 过滤每行首尾空白符
  .filter(e => !!e)     // 过滤空白行
  .reduce(function () { // 只保留次数大于等于 `THRESHOLD` 的行
    const temp = {};
    return function (acc, cur, idx, src) {
      if (temp[cur]) {
        temp[cur]++;
      } else {
        temp[cur] = 1;
      }

      if (idx === src.length - 1) {
        return Object.keys(temp).filter((k) => temp[k] >= THRESHOLD).sort(); 
      }
    }
  }(), 0);

console.log(results);
阅读 2.2k
3 个回答

浏览器做不到, node 可以

var fs = require("fs")
var os = require("os");
// os.EOL 内容 换行符号
// fs.readFileSync 读取
// fs.writeFileSync 覆写
// fs.appendFileSync 追加

let fileName = '1.txt';// 文件名
// 模拟数据
let source = `
  127.0.0.1
  127.0.0.2
  127.0.0.2
  127.0.0.3
  127.0.0.1
  127.0.0.1
  127.0.0.1
  127.0.0.3
  127.0.0.1
  127.0.0.4
  127.0.0.4
  127.0.0.4
`;
// 覆写
fs.writeFileSync(fileName, source);
// 读取
let data = fs.readFileSync(fileName, (err, data) => {
    if (err) throw err;
})
source = data.toString();

let resFileName = '2.txt';// 文件名
const THRESHOLD = 3;
let results = source
    .split('\n')          // 按换行符分割
    .map(e => e.trim())   // 过滤每行首尾空白符
    .filter(e => !!e)     // 过滤空白行
    .reduce(function () { // 只保留次数大于等于 `THRESHOLD` 的行
        const temp = {};
        return function (acc, cur, idx, src) {
            if (temp[cur]) {
                temp[cur]++;
            } else {
                temp[cur] = 1;
            }

            if (idx === src.length - 1) {
                return Object.keys(temp).filter((k) => temp[k] >= THRESHOLD).sort();
            }
        }
    }(), 0);
// 追加 2.txt
fs.appendFileSync(resFileName, os.EOL + results.join(os.EOL));

// 覆写 1.txt 为空
fs.writeFileSync(fileName, '');

感觉你的应用需求比较奇怪,对普通本地文件的操作,在普通浏览器环境中因为安全策略原因都是被禁止的。

你的读取本地文件,并写结果到另外的本地文件,在普通浏览器中直接是不行的,不过有一种变通的方法,可以不通过服务器后端就实现,方法就是下载一个输出结果文件,不过这种方法也不能删除源文件中的任何数据。

另外的办法就是专用环境的浏览器,比如开发本地程序的浏览器,例如electron开发的应用,这时可以通过nodejs操作本地文件,可以实现你所有的功能要求。

浏览器的前端环境是沙盒,接触不到真正的文件系统。
原因 @xdsnet 已经讲了。

推荐问题