JavaSE 7中增加了Path接口和Files类,他们使用起来比JDK1.0中的File类方便很多。
Interface Path
Path是目录名的序列,可以包含或者不包含文件名。根据是否以根目录开头,可以分为绝对路径和相对路径。Path用于在文件系统中定位文件对象。
类Paths
Paths.get(String first, String ...more):这个静态方法,接收一个或者多个字符串,并将这些字符串通过操作系统默认的路径分隔符连接起来(Unix系统为"/",Windows为“\”)。返回结果为Path对象。如果结果不是一个合法的路径,抛出InvalidPathException。
Path absolute = Paths.get("/usr", "local");
System.out.println(absolute); // output: /usr/local
Paths.get(URI uri):这个静态方法将给定的URI转化为Path对象。
Path方法
boolean isAbsolute():是否绝对路径。
Path getRoot():返回Path对象的root,如果没有,返回null。
Path getFilename() :返回该路径或者文件的名称,filename是路径中距离根目录最远的元素。
Path getParent():返回父目录。
int getnameCount():返回路径中名称的个数。
int getName(int index): 离根目录最近的名称,index为0,最远的为名称总的个数-1。
Path subpath(int beginIndex, int endIndex):从beginIndex开始,包含beginIndex的名称,以endIndex结束,但不含endIndex位置的名称。
boolean startsWith(Path other):Test if this Path start with the given Path.
boolean startsWith(String other):
boolean endWith(Path other): Test if this Path ends with the given Path.
boolean endWith(String other):
Path resolve(Path other): p.resolve(q),如果q是一个绝对路径,返回other。否则,结果是p+q。
Path resolve(String other):
Path resolveSibling(Path other): 相对于当前路径的父目录,生成一个目录。
Path resolveSibling(String other):
Path relativize(Path other):创建相对路径
Path toFile():返回一个File对象。
实例
Path curPath = Paths.get("/usr","local","etc");
System.out.println(curPath); //output: /usr/local/etc
System.out.println(curPath.toString()); //output: /usr/local/etc
System.out.println(curPath.isAbsolute()); //output:true
System.out.println(curPath.getRoot()); //output: /
System.out.println(curPath.getFileName()); //output: etc
System.out.println(curPath.getNameCount());//output: 3
System.out.println(curPath.getParent()); //output: /usr/local
System.out.println(curPath.getName(0)); //output: usr
System.out.println(curPath.getName(1)); //output: local
System.out.println(curPath.getName(2)); //output: etc
System.out.println(curPath.subpath(1, 2)); //output: local
Path siblingPaths = curPath.resolveSibling("temp");
System.out.println(siblingPaths); //output: /usr/local/temp
System.out.println(curPath.relativize(siblingPaths));//output: ../temp
Files
Files类提供了常见的文件操作,读写文件,创建、移动,复制、删除文件等。
创建路径和文件
Files.createDirectory(path) : 如果中间目录不存在,会报错。
Files.createDirectories(path):如果中间目录不存在,会自动创建。
Files.createFile(path): 如果文件存在,抛出异常。
Files.createTempFile(dir, prefiex, suffix);
Files.createTempDirectory(prefix);
读写文件
static bye[] readAllBytes(Path path):
static List readAllLines(Path path, Charset charset)
static Path write(Path path, byte[] butes, OpenOption... options)
获取文件信息
• static boolean exists(Pathpath)
• static boolean isHidden(Pathpath)
• static boolean isReadable(Pathpath)
• static boolean isWritable(Pathpath)
• static boolean isExecutable(Pathpath)
• static boolean isRegularFile(Pathpath)
• static boolean isDirectory(Pathpath)
• static boolean isSymbolicLink(Pathpath)
• static long size(Path path)
• static FileTime getLastModifiedTime(Path path, LinkOption... options)
目录遍历
静态方法Files.list()方法可读取目录下所有文件,返回一个Stream。该方法不会进入子目录。如果要进入子目录,使用Files.walk()方法。
try(Stream entries = Files.list(directory)){
...
}
类File
String[] list(): 返回目录下文件名,不包含完全路径。
File[] listFiles():返回目录下文件,包含完全路径。