File类
java.io.File 类 ,代表文件或者目录,通过File类,可以执行诸如创建、删除、重命名文件或目录等操作,但File类不直接提供对文件的读写操作,需要通过IO流进行
//创建文件
File file = new File("C:\\path\\to\\file.txt");
File relativeFile = new File("relative/path/to/file.txt");
//判断是否存在,是文件还是目录
file.isFile();
file.isDirectory();
file.exists();
//文件信息获取
getName():返回文件或目录的名称。
getAbsolutePath():返回文件或目录的绝对路径。
getParent():返回父目录的路径名字符串;如果不存在父目录,则返回null。
length():返回文件长度(字节数),对于目录则返回0L。
lastModified():返回文件最后修改的时间戳。
//创建文件或目录
createNewFile():当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建一个空文件,并返回true;否则返回false。
mkdir():创建由抽象路径名指定的单级目录,如果成功则返回true。
mkdirs():创建由抽象路径名指定的多级目录,包括任何必需但不存在的父目录
//删除文件或目录
delete():尝试删除文件或空目录,如果成功则返回true;否则返回false。注意,这个方法不会将文件移动到回收站,而是永久删除。
//遍历目录
list() 和 listFiles() 方法可用于遍历目录中的文件和子目录。前者返回的是文件名数组,后者返回的是File对象数组。还可以结合FilenameFilter接口或FileFilter接口来过滤特定类型的文件。
//其他功能
renameTo(File dest):将当前File对象指定的文件重命名为由参数dest指定的新路径。
canRead() 和 canWrite():分别测试应用程序是否可以读取或写入文件。
setReadOnly():设置文件为只读模式。
Path接口和Paths类
java.nio.file.Path
接口和java.nio.file.Paths
类 属于jdk7提供的NIO包下,性能上比旧的File更好
Path
接口代表了文件系统中的一个路径,而Paths
类则是一个工具类,用于创建Path
对象
Path接口常用操作
//获取路径信息
Path path = Paths.get("/home/user/documents/example.txt");
System.out.println("文件名:" + path.getFileName());
System.out.println("父路径:" + path.getParent()); //如果当前路径已经是根路径,则返回null。
System.out.println("根路径:" + path.getRoot());
System.out.println("是否为绝对路径:" + path.isAbsolute());
System.out.println("路径元素数量:" + path.getNameCount());
// 输出: 文件名:example.txt
// 父路径:/home/user/documents
// 根路径:/
// 是否为绝对路径:true
// 路径元素数量:4
//获取指定索引处的名称元素
for (int i = 0; i < path.getNameCount(); i++) {
System.out.println("索引" + i + "处的名称:" + path.getName(i));
}
//将相对路径转换为绝对路径:调用toAbsolutePath()方法可以确保路径总是从根开始,并且不会受到当前工作目录的影响
System.out.println("绝对路径:" + path.toAbsolutePath());
//规范化路径:使用normalize()方法可以移除路径中的冗余元素(如.代表当前目录和..代表上一级目录)
Path normalizedPath = Paths.get("/home/user/../user/documents/./example.txt").normalize();
System.out.println("规范化后的路径:" + normalizedPath);
//构建新路径:通过resolve(Path other)和resolve(String other)方法可以创建一个新的路径对象,该路径基于当前路径并添加了另一个路径或字符串作为子路径。如果提供的参数是绝对路径,则直接返回该参数;如果是相对路径,则将其附加到当前路径之后
Path resolvedPath = path.resolve("subfolder/file2.txt");
System.out.println("组合后的路径:" + resolvedPath);
//生成相对路径:relativize(Path other)方法可以根据当前路径生成相对于另一个给定路径的相对路径
Path relativeToOther = path.relativize(Paths.get("/home/user/projects/projectA"));
System.out.println("相对于其他路径:" + relativeToOther);
//迭代路径中所有部分
Iterator<Path> iterator = path.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
//输出: home user documents example.txt
//File和Path的相互转化
File file = path.toFile();
Path pathFromFile = file.toPath();
Paths类常用操作
//从字符串创建Path
Path path = Paths.get("C:", "Users", "username", "Documents", "file.txt");
System.out.println("完整路径:" + path);
//从URI创建Path
URI uri = URI.create("file:///C:/Users/username/Documents/file.txt");
Path pathFromUri = Paths.get(uri);
System.out.println("从URI创建的路径:" + pathFromUri);
Files
java.nio.file.Files
类
Files和Path,Paths结合使用
文件基本操作
//检查文件是否存在:使用Files.exists(Path path)方法可以判断指定路径下的文件或目录是否存在
Files.exists(Path path)
//创建文件:如果需要创建一个新的文件,可以调用Files.createFile(Path path)。如果文件已经存在,则会抛出FileAlreadyExistsException异常。
Files.createFile(Path path)
//创建目录:对于创建目录的需求,Files.createDirectory(Path dir)方法是一个合适的选择。同样地,如果目录已经存在,也会抛出相应的异常FileAlreadyExistsException
Files.createDirectory(Path dir)
//删除文件或目录:要删除一个文件或空目录,可以使用Files.delete(Path path)。需要注意的是,如果尝试删除非空目录,则会失败并抛出异常NoSuchFileException
Files.delete(Path path)
文件内容读写
//读取整个文件为字节数组:当需要将小文件的内容一次性加载到内存时,
Files.readAllBytes(Path path)
//按行读取文件内容:为了逐行读取文本文件的内容,
Files.readAllLines(Path path)允许你轻松获取每一行作为字符串列表
//写入文件:写入二进制数据还是文本内容,
Files.write(Path path, byte[] bytes)和
Files.writeString(Path path, CharSequence csq, OpenOption... options)后者可以指定字符编码
//复制文件:不仅能够复制文件本身,还可以根据提供的选项决定是否覆盖目标位置上的现有文件
Files.copy(Path source, Path target, CopyOption... options)
//移动或重命名文件:不仅可以移动文件,还可以实现文件的重命名功能
Files.move(Path source, Path target, CopyOption... options)方法
//遍历目录:利用Files.newDirectoryStream()可以方便地遍历指定目录下的所有条目。此方法返回一个DirectoryStream<Path>对象
try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("/path/to/dir"))) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
} catch (IOException e) {
e.printStackTrace();
}
//获取文件属性:除了基本的文件操作外,Files还提供了获取文件属性的方法,例如Files.size(Path path)用于查询文件大小;Files.getLastModifiedTime(Path path)用来读取最后一次修改时间等
try {
long fileSize = Files.size(Paths.get("/path/to/file.txt"));
System.out.println("文件大小:" + fileSize + " 字节");
BasicFileAttributes attrs = Files.readAttributes(Paths.get("/path/to/file.txt"), BasicFileAttributes.class);
System.out.println("最后修改时间:" + attrs.lastModifiedTime());
} catch (IOException e) {
e.printStackTrace();
}