RawLocalFileSystem是hadoop中实现的本地文件系统,在该类中与文件元数据和目录相关的操作,都是通过适配方式适配到java.io.File的对应API来完成的,适配过程简单,代码清晰。
下面主要以mkDirs()方法为例来窥探该类的实现和一些独到之处。
/**************************************************************** * Implement the FileSystem API for the raw local filesystem. * * 本地文件系统实现,文件元数据和目录相关的操作都是通过适配到java.io.File的对应API完成的。 *****************************************************************/ public class RawLocalFileSystem extends FileSystem { static final URI NAME = URI.create("file:///"); //本地文件系统的uri scheme private Path workingDir; /** * Creates the specified directory hierarchy. Does not * treat existence as an error. */ //递归创建目录,是个幂等操作 public boolean mkdirs(Path f) throws IOException { Path parent = f.getParent(); File p2f = pathToFile(f); //如果父目录为空,试图先创建父目录 //通过File创建目录,并判断成功创建目录 return (parent == null || mkdirs(parent)) && (p2f.mkdir() || p2f.isDirectory()); } /** {@inheritDoc} */ //递归创建目录,并为目录设置访问权限(通过调用shell的"chmod "命令来完成的) //问答:奇怪java的文件操作中没有提供chmod的api吗???查看java.io.File后发现提供了相应的api, //但控制粒度太粗了,相关api为:setReadOnly,setWritable,setReadable,setExecutable。对用户权限的控制只到了owner和other的区分对待,没有“chmod ”控制的精细 @Override public boolean mkdirs(Path f, FsPermission permission) throws IOException { boolean b = mkdirs(f); setPermission(f, permission); return b; }
时间: 2024-10-20 07:03:14