java讲义阅读学习File类
前言: 临近开学,面临考研学习等诸多的压力,通过java讲义图书,重新学习java io流中核心的知识形成自己的体系。从更深的层次上来说,以后学习的时间日益的缩减和紧张。通过读书学习的方式更能够培养自学的能力,拜托对教程的过渡依赖。在下学期中也可以更好地提高学习的效率。提高总结能力吧。
File类
File介绍
File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。值得指出的是,不管是文件还是目录都是使用File来操作的,File能新建、删除、重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
通过源码结构图的分析可以得知File类中没有默认的构造方法,必须通过URL指定File所创建的文件目录。
File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。在默认情况下,系统总是依据用户的工作路径来解释相对路径。
一旦创建了File对象后,就可以调用File对象的方法来访问,File类提供了很多方法来操作文件和目录,下面列出一些比较常用的方法。
访问文件名相关的方法
一般工程上把pojo的get/set方法后面部分名称称为property,实例变量叫attribute
Java类里的变量都可以叫field
下面是源码上面字段的对应部分。
下面介绍的是访问文件对应的方法
-
String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)
-
String getPath():返回此File对象所对应的路径名。
-
File getAbsoluteFile():返回此File对象所对应的绝对路径所对应的File对象。
-
String getAbsolutePath():返回此File对象所对应的绝对路径名。
-
String getParent():返回此File对象所对应目录(最后一级子目录)的父目录名。
-
boolean renameTo(File newName):重命名此File对象所对应的文件或目录,如果重命名成功,则返回true;否则返回false。
这些访问文件相关的方法,在File类的源码中都有对应。如上图所示。
文件检测相关的方法
- boolean exists():判断File对象所对应的文件或目录是否存在。
- boolean canWrite():判断File对象所对应的文件和目录是否可写。
- boolean canRead():判断File对象所对应的文件和目录是否可读。
- boolean isFile():判断File对象所对应的是否是文件,而不是目录。
- boolean isDirectory():判断File对象所对应的是否是目录,而不是文件。
- boolean isAbsolute():判断File对象所对应的文件或目录是否是绝对路径。
总结:文件检测的相关的方法总结为:判断文件存在,判断文件是否可读写,判断文件的类型
上图中的方法对应了文件检测中常用的一些方法。
文件操作相关的方法
- boolean createNewFile():当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,如果创建成功则返回true;否则返回false。
- boolean delete():删除File对象所对应的文件或路径。
- static File createTempFile(String prefix, String
suffix):在默认的临时文件目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过File类来调用。prefix参数必须至少是3个字节长。建议前缀使用一个短的、有意义的字符串,比如"hjb"或"mail"。suffix参数可以为null,在这种情况下,将使用默认的后缀“.tmp”。
文件相关的操作方法主要涉及到了文件的创建与删除,可以和目录的相关方法对应学习
目录操作相关的方法
-
boolean
mkdir():试图创建一个File对象所对应的目录,如果创建成功,则返回true;否则返回false。调用该方法时File对象必须对应一个路径,而不是一个文件。 -
String[] list():列出File对象的所有子文件名和路径名,返回String数组。
-
File[] listFiles():列出File对象的所有子文件和路径,返回File数组。
-
static File[] listRoots():列出系统所有的根路径。这是一个静态方法,可以直接通过File类来调用
这些所写过的方法属于File类中的常用方法。
File类的实际操作
实例一:以当前的路径创建一个File对象并获取文件信息
package com.dzu.cn;
import java.io.File;
import java.io.IOException;
/**
* @Author ChenRuXu
* @Date 2022/2/21 20:47
* @Version 1.0
*/
public class TestFile {
public static void main(String[] args) throws IOException {
File file = new File("file");
System.out.println(file.getName());
//获取绝对路径
System.out.println(file.getAbsolutePath());
//获取相对路径的父路径
System.out.println(file.getParent());
//获取上一级路径
System.out.println(file.getAbsoluteFile().getParent());
}
}
实例二:创建文件
方式一:根据文件路径来创建文件
package com.dzu.cn;
import java.io.File;
import java.io.IOException;
/**
* @Author ChenRuXu
* @Date 2022/2/22 17:34
* @Version 1.0
*/
public class CreateFile {
public static void main(String[] args) {
CreateFile createFile = new CreateFile();
createFile.create01();
}
//根据文件的路径创建文件一
public void create01(){
String filePath ="e:\\news1.txt";
File file = new File(filePath);
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
方式二:父文件加子路径构建File
//根据父文件加子路径构建File(File partent,String child)
public void create02() {
//父文件内存中保存
File partentFile = new File("e:\\");
String filename = "news2.txt";
File file = new File(partentFile,filename);
try {
file.createNewFile();
System.out.println("创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
方式三:父路径加子路径创建
//创建方式三
public void create03(){
String partentpath = "e:\\";
String fileName = "news3.txt";
File file = new File(partentpath,fileName);
try {
file.createNewFile();
System.out.println("创建文件3成功");
} catch (IOException e) {
e.printStackTrace();
}
}
根据三种创建文件的方式对应了File类中的三个构造器。
实例三:获取文件的相关信息
package com.dzu.cn;
import java.io.File;
/**
* 获取文件信息
* @Author ChenRuXu
* @Date 2022/2/22 18:18
* @Version 1.0
*/
public class FileInformation {
public static void main(String[] args) {
//创建文件对象
File file = new File("e:\\news1.txt");
//调用相关的方法获取文件信息(文件名)
System.out.println(file.getName());
//获取文件父目录
System.out.println(file.getParent());
//获取文件大小按照字节(一个汉字三个字节)
System.out.println(file.length());
//判断文件是否存在
System.out.println(file.exists());
//判断是否是一个文件呢
System.out.println(file.isFile());
//判断文件是否是一个目录
System.out.println(file.isDirectory());
}
}
实例四:目录相关操作
创建一级目录,创建多级目录,删除目录
操作一:判断文件是否存在存在则删除
package com.dzu.cn;
import java.io.File;
/**
* 目录相关操作
* @Author ChenRuXu
* @Date 2022/2/22 18:34
* @Version 1.0
*/
public class Directory {
public static void main(String[] args) {
Directory directory = new Directory();
directory.m1();
}
/**
* 删除文件
*/
public void m1(){
String filepath = "e:\\news1.txt";
File file = new File(filepath);
if (file.exists()){
if (file.delete()){
System.out.println("文件删除成功");
}else {
System.out.println("文件删除失败");
}
}else {
System.out.println("文件不存在");
}
}
}
操作二:在D盘下新建一个demo的文件夹目录,在该目录的下面随意健几个文件进行测试
经过测试可以发现文件中存在其他的东西时删除会失败,里面为空则会删除成功
/**
* 删除文件夹
*/
public void m2(){
String filepath ="d:\\demo";
File file = new File(filepath);
if (file.exists()){
if (file.delete()){
System.out.println("文件夹删除成功");
}else {
System.out.println("文件夹删除失败");
}
}else {
System.out.println("文件夹不存在");
}
}
操作三:创建多级目录mkdirs()
public void m3(){
String filepath ="d:\\demo\\aa\\bb";
File file = new File(filepath);
if (file.exists()){
System.out.println("文件存在");
}else {
if (file.mkdirs()){
System.out.println("多级目录创建成功");
}else {
System.out.println("多级目录创建失败");
}
}
}