IO流之File类的使用
1.关于File类的理解
- 1.File类声明在java.io包下
- 2.File类的一个实例化对象,可以代表一个文件或者一个文件夹(或者文件目录)
- 3.File类中涉及到文件或者文件目录的创建、删除等方法,但没有涉及到如何写入文件内容或者读取文件内容。当需要写入文件内容或者读取文件内容,必须使用IO流来完成。
- 4.File类的对象常作为参数传递到流的构造器中,指明读取或写入的"终点"。
2.File类的构造方法
构造方法1—File(String pathname):根据一个路径得到File对象
import java.io.File;
public class MyTest {
public static void main(String[] args) {
//构造方法1:File(String pathname):根据一个路径得到File对象。
//这里pathname可以使用绝对路径也可以使用相对路径
//绝对路径:带有盘符号的一个详细的路径
//相对路径:不带盘符号,Java项目中的相对路径,就指的是项目的根目录
//使用绝对路径
File file = new File("C:\\Users\\zlb\\Desktop\\a.txt");
//使用相对路径
File file1 = new File("b.txt");
}
构造方法2—File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
import java.io.File;
public class MyTest2 {
public static void main(String[] args) {
File file = new File("C:\\Users\\zlb\\Desktop\\a.txt");
//构造方法2:File(String parent, String child)
//根据一个目录和一个子文件/目录得到File对象
//父路径 子文件名
File file1 = new File("C:\\Users\\zlb\\Desktop", "a.txt");
}
}
构造方法3—File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
import java.io.File;
public class MyTest3 {
public static void main(String[] args) {
File file = new File("C:\\Users\\zlb\\Desktop\\a.txt");
File file1 = new File("C:\\Users\\zlb\\Desktop", "a.txt");
//File(File parent, String child)
// 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
//封装父目录
File file2 = new File("C:\\Users\\zlb\\Desktop");
File file3 = new File(file2, "a.txt");
// /上坡杠 \下坡杠
File file4 = new File("C:\\Users\\zlb\\Desktop\\a.txt");
File file5 = new File("C:/Users/zlb/Desktop/a.txt");
}
}
3.File类的创建功能
File类的创建功能 |
---|
public boolean createNewFile():创建一个新的文件 如果存在这样的文件,就不创建了 |
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了。注意这个方法只能创建单层目录 ,如果创建多层目录得一层一层创建 |
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 。可以创建多层目录 ,当然也可以创建单层目录 |
创建文件—public boolean createNewFile()
import java.io.File;
import java.io.IOException;
public class MyTest {
public static void main(String[] args) throws IOException {
//相对路径:项目目录的根目录下
File file = new File("a.txt");
//绝对路径:带有盘符的详细路径
File file1 = new File("G:\\zlb\\IdeaProjects\\JavaFile文件类的学习\\b.txt");
//public boolean createNewFile():创建一个新的文件 如果存在这样的文件,就不创建了
boolean b = file.createNewFile();
System.out.println(b);
boolean b1 = file1.createNewFile();
System.out.println(b1);
}
}
运行后的结果为:
创建单级文件夹与多级文件夹----public boolean mkdir()/mkdirs()
import java.io.File;
public class MyTest2 {
public static void main(String[] args) {
//创建单级文件夹
File file = new File("C:\\Users\\zlb\\Desktop\\aa");
boolean mkdir = file.mkdir();
System.out.println(mkdir);
//创建多级文件夹
//创建单级或多级目录。返回值的第一次创建成功返回true,
//如果目录已经存在,重复创建返回false
File file1 = new File("C:\\Users\\zlb\\Desktop", "demo\\aa\\bb");
boolean b1 = file1.mkdirs();
System.out.println(b1);
}
4.File类的删除功能
File类的删除功能 |
---|
public boolean delete():删除文件或者文件夹 |
注意:删除文件夹时,当这个文件夹为空文件夹,可以直接删除。如果这个文件夹里面有文件,则不能删除。同时需要注意的是Java中的删除是不走回收站的,直接执行删除的操作。
import java.io.File;
public class MyTest3 {
public static void main(String[] args) {
File file = new File("a.txt");
//删除文件,不走回收站,删除成功返回true,删除失败返回false
boolean b = file.delete();
System.out.println(b);
File file1 = new File("C:\\Users\\zlb\\Desktop\\aa");
//删除文件夹:当文件夹为空时,可以直接删除;当文件夹为不为空时,不能直接进行删除
boolean b1 = file1.delete();
System.out.println(b1);
}
}
5.File类的重命名功能
File类的重命名功能 |
---|
public boolean reameTo(File dest):把文件重命名为指定的文件路径 |
如果命名前后文件的路径名相同,就是修改名字的操作。如果命名前后文件的路径名不相同,就是修改名字并且进行剪切的操作。
import java.io.File;
import java.io.IOException;
public class MyTest {
public static void main(String[] args) throws IOException {
//修改前后的文件路径名相同,就是改名。
File file = new File("b.txt");
File file1 = new File("hello.txt");
boolean b = file.renameTo(file1);
System.out.println(b);
//修改前后的文件路径名不相同,就是改名并且剪切的操作
File file2 = new File("C:\\Users\\zlb\\Desktop\\java.txt");
boolean b1 = file2.createNewFile();
System.out.println(b1);
boolean b2 = file1.renameTo(file2);
System.out.println(b2);
}
}
6.File类的判断功能
File类的判断功能 |
---|
public boolean isDirectory(): 判断是否是目录 |
public boolean isFile(): 判断是否是文件 |
public boolean exists(): 判断是否存在 |
public boolean canRead(): 判断是否可读 |
public boolean canWrite(): 判断是否可写 |
public boolean isHidden(): 判断是否隐藏 |
public boolean isAbsolute(); 判断是否使用的是绝对路径 |
import java.io.File;
public class MyTest2 {
public static void main(String[] args) {
File file = new File("hello.txt");
if(file.isFile()){
System.out.println("是文件");
}if(file.isDirectory()){
System.out.println("是目录");
}else{
System.out.println("不是目录");
}
if(file.exists()){
System.out.println("文件存在");
}
}
}
运行后的结果为:
import java.io.File;
public class MyTest3 {
public static void main(String[] args) {
File file = new File("C:\\Users\\zlb\\Desktop\\java.txt");
if(file.isAbsolute()){
System.out.println("使用的是绝对路径");
}else{
System.out.println("使用的不是绝对路径");
}
if(file.canRead()){
System.out.println("文件可读");
}else {
System.out.println("文件不可读");
}
if(file.canWrite()){
System.out.println("文件可写");
}else{
System.out.println("文件不可写");
}
if(file.isHidden()){
System.out.println("文件是隐藏的");
}else{
System.out.println("不是隐藏文件");
}
}
}
运行后的结果为:
7.File类的获取功能
File类的获取功能 |
---|
public String getAbsolutePath():获取绝对路径 |
public String getPath():获取相对路径 |
public String getParent() :返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null |
public File getParentFile() :返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 |
public long getTotalSpace() :返回此抽象路径名指定的分区大小。 返回总容量 单位字节。 |
public long getFreeSpace() :返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量 单位字节 |
public String getName():获取名称 |
public long length():获取长度。返回的是文件字节数 |
public long lastModified():获取最后一次的修改时间,毫秒值 |
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组 |
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组 |
import java.io.File;
public class MyTest {
public static void main(String[] args) {
File file = new File("hello.txt");
//获取文件的绝对路径
String absolutePath = file.getAbsolutePath();
System.out.println(absolutePath);
//获取文件的相对路径
String path = file.getPath();
System.out.println(path);
//public String getParent() 返回此抽象路径名父目录的路径名字符串
String parent = file.getParent();
System.out.println(parent);
//public File getParentFile():返回此抽象路径名父目录的抽象路径名
File parentFile = file.getParentFile();
System.out.println(parentFile);
//public String getName():获取名称
String name = file.getName();
System.out.println(name);
//public long length():获取长度。字节数
long length = file.length();
System.out.println(length);
}
}
运行后的结果为:
import java.io.File;
public class MyTest2 {
public static void main(String[] args) {
File file = new File("D:\\");
//获取总空间大小单位是字节 1byte=8bit 1kb=1024byte 1M=1024kb 1G=1024M
long totalSpace = file.getTotalSpace();
System.out.println("D盘总空间为:"+totalSpace/1024/1024/1024.0+"GB");
//获取剩余空间
long freeSpace = file.getFreeSpace();
System.out.println("D盘可用空间为:"+freeSpace/1024/1024/1024.0+"GB");
}
}
运行后的结果为:
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyTest3 {
public static void main(String[] args) {
File file = new File("hello.txt");
//public long lastModified():获取最后一次的修改时间,毫秒值
long time = file.lastModified();
System.out.println("毫秒值:"+time);
//将文件最后一次修改时间的毫秒值转换为具体可见的时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String format = simpleDateFormat.format(new Date(time));
System.out.println(format);
}
}
运行后的结果为:
7.1 练习:输出指定目录下指定后缀的文件名
需求:判断桌面上demo目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
import java.io.File;
import java.io.FileFilter;
public class MyTest4 {
public static void main(String[] args) {
//判断桌面上demo目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
File file = new File("C:\\Users\\zlb\\Desktop\\demo");
//实现方式一:利用listFiles()方法来遍历判断
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isFile()&&file1.getName().endsWith(".jpg")){
System.out.println(file1.getName());
}
}
System.out.println("=================");
//实现方式二:通过文件名称过滤器来进行处理
file.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
if(f.isFile()&&f.getName().endsWith(".jpg")){
System.out.println(f.getName());
return true;
}
return false;
}
});
}
}
运行后的结果为:
总结
本节主要介绍了File类的构造方法与常见的一些使用方法,但File类没有涉及到如何写入文件内容或者读取文件内容。当需要写入文件内容或者读取文件内容,必须使用IO流来完成。后面我们将具体学习字节流与字符流,对文件进行书写与读取。