nodejs中有一组流API,连续处理文件非常方便,但是不能在指定位置进行读写。文件描述符句柄在nodejs中也是一个整数,文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。有3个特殊的文件描述符――1、2和3。他们分别代表标准输入,标准输出和标准错误文件描述符。标准输入,顾名思义,是个只读流,进程用它来从控制台或者进程通道读取数据。标准输出和标准错误是仅用来输出数据的文件描述符,他们经常被用来向控制台,其它进程或文件输出数据。标准错误负责错误信息输出,而标准输出负责普通的进程输出。在nodejs中,即可以创建只能向尾部追加数据的文件,还可以创建读写随机位置的文件。
文件路径分为相对路径和绝对路径两种,用它们来表示具体的文件。你可以合并文件路径,可以提取文件名信息,甚至可以检测文件是否存在。Node里,可以用字符串来操处理文件路径,但是那样会使问题变复杂。一般使用path模块,可以帮你标准化,连接,解析路径,从绝对路径转换到相对路径,从路径中提取各部分信息,检测文件是否存在。
path模块的normalize函数来标准化一个路径。path.normalize('/foo/bar//baz/asdf/quux/..');// => '/foo/bar/baz/asdf'
path.join()函数,可以连接任意多个路径字符串,只用把所有路径字符串依次传递给join()函数,path.join()内部会自动将路径标准化。
path.resolve()可以把多个路径解析为一个绝对路径。它的功能就像对这些路径挨个不断进行“cd”操作,和cd命令的参数不同,这些路径可以是文件,并且它们不必真实存在,不存在会把当前工作目录作为路径附加到解析结果前面。
path.relative()可以计算两个绝对路径的相对路径。
用path.dirname(filePath)获得文件路径的目录部分。
用path.basename函数获取文件路径的最后那一部分。path.basename还可以接受一个扩展名字符串作为第二个参数,这样返回的文件名就会自动去掉扩展名,仅仅返回文件的名称部分。
用path.extname()来获取扩展名。
path.exists()是个I/O操作,因为它是异步的,因此需要一个回调函数,当I/O操作返回后调用这个回调函数,并把结果传递给它。你还可以使用它的同步版本path.existsSync(),从Node0.8版本开始,exists从path模块移到了fs模块,变成了fs.exists,除了命名空间不同,其它都没变。