文件系统

Node.js 文件系统

$ npm install --save walk-sync
const walkSync = require("walk-sync");
const paths = walkSync("project");

// 输出结果
// ['one.txt', 'subdir/', 'subdir/two.txt']

文件寻址

Node 中的文件路径大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三个都是绝对路径,为了便于比较,./../ 我们通过 path.resolve('./') 来转换为绝对路径。

  • __dirname: 总是返回被执行的 js 所在文件夹的绝对路径
  • __filename: 总是返回被执行的 js 的绝对路径
  • process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径
app/
    -lib/
        -common.js
    -model
        -task.js
        -test.js

在 task.js 里编写如下的代码:

var path = require("path");

console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve("./"));

model 目录下运行 node task.js 得到的输出是:

/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model/task.js
/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model

然后在 app 目录下运行 node model/task.js,得到的输出是:

/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model/task.js
/Users/guo/Sites/learn/app
/Users/guo/Sites/learn/app

只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:

// 当前目录下
path.dirname(__filename) + "/test.js";
// 相邻目录下
path.resolve(__dirname, "../lib/common.js");
fs.readFile(path.resolve(__dirname, "settings.json"), "UTF-8", callback);

path.sep 表示了平台相关的路径分隔符,即  '\\' 或者 '/';在类 Unix 系统中,我们可以进行如下测试: 'foo/bar/baz'.split(path.sep)// returns ['foo', 'bar', 'baz']而在 Windows 系统中,则是用的双斜杠分隔:```‘foo\bar\baz’.split(path.sep)// returns [‘foo’, ‘bar’, ‘baz’]

上一页
下一页