(一)Java中的IO操作—— File类
一、File类
在系统中用户通过文件系统所提供的系统调用实施对文件的操作。
最基本的文件操作有: 创建文件、删除文件、读文件、写文件、截断文件和设置文件的读/写位置。
在Java中使用File类来作为目录或者文件的表示形式,也就是说我们想要表示一个文件,构造一个File对象即可。
构造方法
File 类常用以下几种方式来创建一个File对象。
注意:new File只是在java中描述这么一个文件,并不代表这个文件真的存在,所以我们可以使用File类的API来进行判断、创建、删除等操作。
@Test
public void fileTest1() throws IOException, URISyntaxException {
// 方式一: 根据指定的父路径和子路径字符串创建一个File对象。
// File(String parent, String child)
File file = new File("D:\\Snow","test.txt");
//方式二:通过将给定路径名字符串来创建一个File对象。
// File(String pathname)
String fileName = "D:" + File.separator + "Snow" + File.separator + "test1.txt";
File file1 = new File(fileName);
file1.createNewFile();
//方式三:根据指定的父File对象和子路径字符串创建一个File对象。
// File(File parent, String child)
File parent = new File("D:\\Snow");
File file2 = new File(parent,"test2.txt");
//方式四:它根据指定的URI创建一个File对象
// File(URI uri)
URI uri = new URI("file:///D://Snow//test3.txt");
File file3 = new File(uri);
}
分隔符
File 中还包括两个分隔符,这两个是File类中给我定义好的,会根据使用的操作系统自动获取当前系统所能使用的分隔符。
所以我们的文件名称可以使用定义的分隔符变量来获取,而不是我们手动写死。
名称分隔符:windows系统下\
,linux、unix系统下/
路径分隔符:windows系统下;
,linux、unix系统下:
源码中分别定义了单个字符表示的分割符和使用字符串拼接后的分隔符。
二、File类常用 API
1、文件属性
属性api较多,我们分段展示
String getName()
:获取文件或目录的路径名称,只返回路径名名称序列中的最后一个名称。String getParent()
:获取当前文件或目录的父路径字符串。File getParentFile()
:获取当前文件或目录的父路径File对象。String getPath()
:获取文件或目录的路径String getAbsolutePath()
:获取文件或目录的绝对路径
public void fileTest2(){
String fileName = "D:" + File.separator + "Snow" + File.separator + "test1.txt";
File file = new File(fileName);
// 获取文件或目录名称
System.out.println("getName方法:" + file.getName());
// 获取父类路径字符串
System.out.println("getParent方法:" + file.getParent());
// 获取父类File对象
File parentFile = file.getParentFile();
System.out.println("getParentFile方法:" + parentFile.getClass());
// 获取抽象路径字符串
System.out.println("getPath方法:" + file.getPath());
// 获取绝对路径字符串
System.out.println("getAbsolutePath方法:" + file.getAbsolutePath());
}
public boolean isDirectory()
:判断是否为目录public boolean isFile()
:判断是否为文件public boolean exists()
:判断文件或目录是否存在public boolean isHidden()
:判断文件是否隐藏public long lastModified()
:获取文件最后修改时间的时间戳,文件时不存在返回0public long length()
:获取文件字节数public boolean isAbsolute()
:判断路径是否为绝对路径
@Test
public void fileTest3(){
File fileDirectory = new File("D:\\Snow\\testFile");
File file = new File("D:\\Snow\\testFile\\test1111.txt");
//判断是否为目录
System.out.println("isDirectory方法:" + file.isDirectory());
//判断是否为文件
System.out.println("isFile方法:" + file.isFile());
//判断文件或目录是否存在
System.out.println("exists方法:" + file.exists());
//判断文件是否隐藏
System.out.println("isHidden方法:" + file.isHidden());
//获取文件最后修改时间的时间戳,文件时不存在返回0
System.out.println("lastModified方法:" + file.lastModified());
//获取文件字节数
System.out.println("length方法:" + file.length());
//判断路径是否为绝对路径
System.out.println("isAbsolute方法:" + file.isAbsolute());
}
2、文件/目录创建删除等
public boolean mkdir()
:创建指定路径名称的目录(父目录不存在无法创建)public boolean mkdirs()
:创建指定路径名称的目录及父目录public boolean delete()
:删除此路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。删除成功才返回 truepublic boolean renameTo(File dest)
:重新命名文件,参数是一个File对象。public boolean createNewFile()
:根据路径名创建一个新文件,会检查文件是否存在,文件存在则返回false。
public void fileTest4() throws IOException {
String fileName = "D:\\Snow\\testFile\\testDir\\aaa";
File file = new File(fileName);
// 当父路径不存在时,无法创建
// System.out.println(file.mkdir());
// 当父路径不存在时会依次创建所有父路径
System.out.println("mkdirs方法:" + file.mkdirs());
// 删除文件或目录
System.out.println("delete方法:" + file.delete());
// 文件或目录重命名
File file1 = new File("D:\\Snow\\testFile\\aaa.txt");
File file2 = new File("D:\\Snow\\testFile\\bbb.txt");
System.out.println("renameTo方法:" + file1.renameTo(file2));
// 创建文件
File file4 = new File("D:\\Snow\\testFile\\newFile.txt");
System.out.println("createNewFile方法:" + file4.createNewFile());
}
3、文件列表
public String[] list()
:返回当前目录下的文件和目录的字符串数组。public File[] listFiles()
:返回当前目录下的文件和目录的 File 对象数组。
@Test
public void fileTest5(){
File file = new File("D:\\Snow\\testFile");
// 获取文件字符串数组
String[] list = file.list();
System.out.println("list方法:"+Arrays.toString(list));
// 获取文件对象数组
File[] listFiles = file.listFiles();
System.out.println("listFiles方法:");
for (File listFile : listFiles) {
System.out.println(listFile);
}
}