转自 开发者的天空
前面我们讨论了怎样对文件进行操作,下面我们来看看怎样对目录进行操作。首先我们来看看怎样列出一个文件系统中所有的更目录,就象我们在
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);
}
}
}
在
我的机器上运行该代码的输出如下:
C:\
D:\
E:\
F:\
G:\
在我的机器上,
C盘是本地硬盘,
D盘是光驱,其他
3个是移动硬盘的分区。
我们可以调用
Path类的
createDirectory方法来创建文件。如果调用该方法是不传递任何参数,那么生成
的新的目录就拥有默认的属性。下面的代码就是创建一个拥有默认属性的新目录:
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目录。
调用该方法的时候要注意该方法并不是原子操作,也就是说目录层次可能有一部分成功,一部分失败。如上面的例子中,可能
first目录创建成功了,但是
abc目录创建失败了。
要想列出目录中所有的内容,可以调用
newDirectoryStream()方法。该方法返回一个实现了
DirectoryStream接口的对象。实
现了
DirectoryStream的对象同时也实现了
Iterable接口,因此我们可以遍历该对象。遍历时得到的元素都是
Path对象。同时要注意的
是返回的
DirectoryStream也是一个流对象,别忘记使用完之后关闭该对象。
下面是示例代码:
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();
}
如果我们查找名字符合某些模式的文件或者只目录,我们可以调用
newDirectoryStream(String)方法。这个方法会调用一个内置的过滤
器来过滤返回的结果。关于模式的使用我们在前面的文章里已经讲过了。下面是具体的例子:
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<T>接口,这个接口只有一个方法
accept,这个方法决定一个文件
/目录是否符合查询条
件。下面是具体的代码:
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();
}
分享到:
相关推荐
在Java SE中,`java.io.File` 类提供了创建、查找和更新文件及目录的方法。通过 `File` 类可以进行基本的文件操作,例如判断文件是否存在、是文件还是目录、获取文件长度等。 - **构造函数**: - `File(String ...
Java集合框架提供了一套用于存储和操作对象的标准接口和实现,主要包括: - **List**:有序集合,允许重复元素。 - **Set**:不允许重复元素的无序集合。 - **Map**:键值对集合,每个键都是唯一的。 #### 6. 输入...
MySQL Connector/J是MySQL数据库系统与Java应用程序之间的重要桥梁,它是一个实现了JDBC(Java Database Connectivity)规范的驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。"mysql-...
5. 文件操作:Java提供了File类来处理文件和目录,如创建、删除、重命名等操作。 6. 多路复用流(选择器):Java NIO(非阻塞I/O)引入了选择器(Selector)和通道(Channel)的概念,允许同时监控多个I/O事件,...
文件管理是Java开发中非常重要的一部分,File类定义了一系列与操作系统平台无关的方法来操作文件和目录,通过类File所提供的方法,可以得到文件或目录的描述信息,主要包括名称、所在路径、可读性、可写性、文件的...
- `java.io.File` 用于表示文件和目录路径名,提供了许多方法来获取和设置文件属性。 - **文件流的建立** - `FileInputStream` 和 `FileOutputStream` 分别用于读取和写入文件。 - **缓冲区流** - `...
- **File类**:处理文件和目录,支持创建、删除、读取等操作。 - **InputStream和OutputStream**:处理字节流,如FileInputStream和FileOutputStream。 - **Reader和Writer**:处理字符流,如 FileReader 和 ...
9.2.3 创建文件和目录 197 9.2.4 复制、移动和删除文件 198 9.3 实现equals、hashCode和compareTo方法 198 9.3.1 安全的Null值相等测试 198 9.3.2 计算哈希码 199 9.3.3 比较数值类型对象 200 9.4 安全需要 201 9.5 ...
总之,理解J2ME中的FileConnection接口是开发能够在移动设备上操作文件和目录的关键。通过熟练掌握这个接口,开发者能够创建功能丰富的应用程序,有效地管理设备的存储空间。记住,实践是提高技能的最好方式,因此,...
3. 文件读写:模拟文件内容的读取和写入,可能使用了字符或字节流。 4. 目录操作:创建、遍历、删除目录,以及在目录间移动文件。 5. 文件重命名:改变文件或目录的名称,同时更新索引节点信息。 6. 权限管理:模拟...
### Java Applet 操作本地文件 #### 知识点一:Java Applet 概述 Java Applet 是一种能够在浏览器中运行的小型应用程序,它利用Java语言编写,并通过Web服务器发送到客户端。用户无需安装即可在支持Java的浏览器中...
但是,File类并不能直接进行读写操作,它主要负责管理和组织文件路径,以及进行文件和目录的创建、删除等操作。 File类提供了多种构造方法,通常包括: 1. 传入文件或目录的路径名,如`new File("aaa.txt")`。 2. ...
#### 一、Java SE环境安装和配置 1. **什么是JDK** - **定义**:JDK(Java Development Kit)即Java开发工具包,是开发Java应用程序的基础。 - **组成部分**: - JRE(Java Runtime Environment):Java运行时...
总的来说,`File`类和`RandomAccessFile`类是Java中处理文件和目录操作的核心工具,它们提供了丰富的功能,使得开发者能够灵活地管理和操作文件系统资源。在实际开发中,了解并熟练掌握这些类的用法对于处理文件操作...
1. 文件操作:Java IO提供了File类来处理文件和目录,包括创建、删除、重命名等操作。 2. 文件复制:可以使用FileInputStream和FileOutputStream配合缓冲流进行文件复制,提高效率。 3. 文件追加:使用FileWriter的...
它于2011年7月发布,引入了许多新特性,如类型推断(钻石操作符),try-with-resources语句,开关语句支持字符串,改进的编译器性能等。 2. **类型推断(Diamond Operator)**: 在Java 7中,当创建泛型实例时,...
java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的选择器。 java.nio.channels.spi 用于 java.nio.channels 包的服务...
Java SE中的Java IO和File类是Java编程中非常重要的部分,尤其对于处理文件和目录的操作。在"VIP09_JavaSE_JavaIO_File_day0307-1.rar"这个压缩包中,我们可以预想它包含的是一个关于Java IO和File类的课程或教程的...
同时,掌握Java 8的新特性,如Optional类、接口默认方法和静态方法,以及方法引用和构造器引用,将对考试大有裨益。 综上所述,这个压缩包中的内容覆盖了Java SE 8的核心技术和考试重点,可以帮助考生系统地复习和...
JAVA-SE入门学习——第九讲IO流 在 Java 中,IO 流(Input/Output Stream)是一种基本的输入/输出机制,它允许程序读取和写入各种类型的数据。...这些方法可以用来创建文件和目录,並且可以对文件和目录进行操作。