文件系统
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’]