精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-11
最后修改:2010-04-11
转自 开发者的天空
前面我们讨论了怎样对文件进行操作,下面我们来看看怎样对目录进行操作。首先我们来看看怎样列出一个文件系统中所有的更目录,就象我们在 Windows中 看到有多少硬盘分区(包括光盘等)。要得到这些信息,可以调用 FileSystem.getRootDirectories 方法。该方法返回一个 Iterable对象,我们可以遍历该对象得到所有的根目录。该对象中的 每个元素都是一个 Path对象。具体的代码例子如下: import java.nio.file.FileSystems; import java.nio.file.Path; public class RootDirectoryReader { public static void main(String[] args){ Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories(); for (Path name: dirs) { System.err.println(name); } } }
在
我的机器上运行该代码的输出如下:
Path dir = Paths.get("C:\\temp"); try { path.createDirectory(); } catch (IOException x) { System.err.println(x); }
下 面的代码是在 POSIX文件系统上创建一个拥有指定的属性的目录: Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---"); FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms); try { file.createDirectory(attr); } catch (IOException x) { System.err.println(x); }
要 想创建一个多层的目录,如 c:\temp\first\abc这样的目录,我们可以使用 Files类的 createDirectories方法。这个方法 接受 Path类作为第一个参数,第二个参数是可选的参数 FileAttribute。下面的代码创建具有缺省属性的多层目录: try { Files.createDirectories(Paths.get("c:\\temp\\first\\abc")); } catch (IOException x) { System.err.println(x); }
从
最上层开始,如果目录不存在,这创建新的目录。例如如果上面的目录层次中,
c:\temp已经存在,则不再创建;
c:\temp\first不存在,则直
接在
c:\temp下创建
first目录,然后在
first目录下创建
abc目录。
Path dir = Paths.get("c:\\"); DirectoryStream<Path> stream = null; try { stream = dir.newDirectoryStream(); for (Path file: stream) { System.out.println(file.getName()); } } catch (IOException x) { //IOException can never be thrown by the iteration. //In this snippet, it can only be thrown by newDirectoryStream. System.err.println(x); } finally { if (stream != null) stream.close(); }
Path dir = ...; DirectoryStream<Path> stream = null; try { stream = dir.newDirectoryStream("*.{java,class,jar}"); for (Path entry: stream) { System.out.println(entry.getName()); } } catch (IOException x) { //IOException can never be thrown by the iteration. //In this snippet, it can only be thrown by newDirectoryStream. System.err.println(x); } finally { if (stream != null) stream.close() }
在
这个例子中,我们只返回以
.java或
.class或
.jar结尾的文件或子目录。
DirectoryStream.Filter<Path> filter = newDirectoryStream.Filter<Path>() { public boolean accept(Path file) { try { boolean isDirectory = Attributes.readBasicFileAttributes(file).isDirectory(); return (isDirectory); } catch (IOException x) { //Failed to determine if it's a directory. System.err.println(x); return false; } } }
当 过滤器创建好之后,我们可以通过 newDirectoryStream(DirectoryStream.Filter<? super Path>)方法来使用它。下面就是一个实现的例子: Path dir = ...; DirectoryStream<Path> stream = null; try { stream = dir.newDirectoryStream(filter); for (Path entry: stream) { System.out.println(entry.getName()); } } catch (IOException x) { System.err.println(x); } finally { stream.close(); }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-12
不好意思 说实话没看出有什么太大变化 望指点
|
|
返回顶楼 | |
发表时间:2010-04-13
最后修改:2010-04-13
whaosoft 写道 不好意思 说实话没看出有什么太大变化 望指点
我的理解,主要的变化有两点: 1. Path类是Java SE 7新引入的类。 2. Path类提供了访问和设置文件/目录属性的功能。 还有一个小的区别就是newDirectoryStream方法可以接受一个字符串作为参数来进行过滤,这一点我觉得很方便。 |
|
返回顶楼 | |
发表时间:2010-04-13
没看懂是什么意思....
|
|
返回顶楼 | |
浏览 5240 次