### File类的概述和构造方法
IO 流是用来进行设备之间的数据传输的
像电脑上的这些,文件,他就属于数据, 我们的数据,是以文件的形式来体现的。文件是数据的载体
那Java为了我们方便的去描述这个文件,或目录,给我们提供了一个类File;File 就是用来描述一个文件或者文件夹(目录),文件和目录路径名的抽象表示形式。
File类的常用构造方法
- File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 - File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 - File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 - 路径:绝度路径,相对路径
绝对路径:带有盘符号的详细路径 E:\MySQL\MySQL Server 5.5\lib\libmysql.lib
相对路径:不带有盘符号的路径 那我们的Java项目来说,相对路径,就是在我们项目的根目录下
- 代码演示:
//通过一个绝对路径,或相对路径,来封装换一个文件
File file = new File("b.txt");
File file1 = new File("E:\\IdeaProjects\\20190507-MyJavaDemo-File-类-下午\\c.txt");
//创建一个文件(创建实体文件),第一次创建成功,返回true,重复创建返回false
boolean newFile = file1.createNewFile();
//封装一个目录
File out = new File("out");
//File(File parent, String child)
//根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
// new File("E:\\test\\test.txt");
File file2 = new File("E:\\test");
File file3 = new File(file1, "test.txt");
//File(String parent, String child)
//根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File file4 = new File("E:\\test", "test.txt");
./ 表示当前目录
…/ 当前目录的上一级目录 …/…/ 当前目录的上两级目录
File file = new File("../../ff.txt");
file.createNewFile();
File file2 = new File("E:\\IdeaProjects\\20190507-MyJavaDemo-File-类-下午\\c.txt");
file2.createNewFile();
文件的创建及删除方法
- 创建文件夹的方式
public class MyTest {
public static void main(String[] args) {
//我要创建目录
File file = new File("C:\\Users\\Administrator\\Desktop\\abc");
//创建单级目录
boolean b = file.mkdir();//第一次创建成功返回true ,如果重复创建则返回false
System.out.println(b);
File file2 = new File("C:\\Users\\Administrator\\Desktop\\aaa\\ccc");
//创建多级目录
boolean b1 = file2.mkdirs(); // 第一次创建成功返回true, 如果重复创建则返回false
}
}
- 文件的删除方法
public class MyTest2 {
public static void main(String[] args) {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\aaa");
//使用delete()方法删除文件或目录,回收站是找不到的
//delete() 这个方法只能删除文件和空目录,非空目录目录,删不了
//如果要删除多级非空目录,得自己写代码实现
boolean delete = file2.delete();
System.out.println(delete);
}
}
- 文件的重命名
public class MyTest3 {
public static void main(String[] args) {
//注意renameTo(file1);这个方法,如果我们传入的这个文件对象,跟源文件在同一个目录下,是重命名
//如果如果我们传入的这个文件对象,跟源文件不在同一个目录下,剪切并重命名。
File file = new File("b.txt");
//把b.txt 改成 b.txt
File file1 = new File("E:\\bbb.txt");
//重命名一个文件
boolean b = file.renameTo(file1);
System.out.println(b);
}
}
文件的属性判断方法
- 判断是文件还是文件夹
public class MyTest {
public static void main(String[] args) {
//有关判断的方法
File file = new File("c.txt");
//判断是否是一个文件
boolean file1 = file.isFile();
//判断是否是一个目录
boolean directory = file.isDirectory();
System.out.println(file1);
System.out.println(directory);
System.out.println("----------------------");
File out = new File("out");
System.out.println(out.isFile());
System.out.println(out.isDirectory());
}
}
- 判断文件是否可读可写
public class MyTest2 {
public static void main(String[] args) {
File file = new File(System.getProperty("user.home") + "\\desktop", "ddd.txt");
boolean b = file.canRead();//判断文件是否可读
boolean b1 = file.canWrite();//判断文件是否可写入
boolean hidden = file.isHidden();//判断文件是否隐藏
System.out.println(b);
System.out.println(b1);
System.out.println(hidden);
File file1 = new File("cccc.txt");
//判断文件或目录是否存在
boolean exists = file1.exists();
System.out.println(exists);
boolean absolute = file1.isAbsolute();
System.out.println(absolute);
}
}
获取文件的一些常用属性
- 获取文件的路径
public class MyTest {
public static void main(String[] args) {
File file = new File("aaa.txt");
String absolutePath = file.getAbsolutePath(); //获取绝对路径的字符串表现形式
File file1 = file.getAbsoluteFile(); //获取据对路径的Flie表现形式,这种形式更加灵活
File file2 = new File("c.txt");
//获取相对路径的字符串表现形式
String path = file2.getPath();
System.out.println(path);
File file3 = new File(new File("E:\\IdeaProjects\\20190507-MyJavaDemo-File-类-下午"),"c.txt");
//获取文件的父路径的字符串表现形式
String parent = file3.getParent();
//获取文件的父路径的File表现形式,这种更加灵活
File parentFile = file3.getParentFile();
System.out.println(parent);
System.out.println(parentFile.toString());
}
}
- 获取目录的容量
public class MyTest3 {
public static void main(String[] args) {
File file = new File("E:\\");
//获取该目录的总容量,单位是字节
long totalSpace = file.getTotalSpace();
System.out.println(totalSpace/1024/1024/1024.0);
//获取剩余容量
long freeSpace = file.getFreeSpace();
System.out.println(freeSpace/ 1024 / 1024 / 1024.0);
//没有现成的获取已使用容量的方法
//获取使用的容量=总容量-剩余容量;
}
}
- 获取文件的长度
public class MyTest4 {
public static void main(String[] args) {
File file = new File("ee.txt");
//获取文件名
String name = file.getName();
//获取文件长度
long length = file.length();
System.out.println(length);
System.out.println(name);
}
}
注意:文件夹没有长度,只有容量
- 获取文件的最后修改时间
public class MyTest5 {
public static void main(String[] args) {
//获取文件的最后一次修改时间
File file = new File("C:\\Users\\Administrator\\Desktop\\ddd.txt");
//获取文件的最后一次修改时间,返回的是毫秒值
long time = file.lastModified();
//把上面的毫秒值,转换成年月日,时分秒
Date date = new Date(time);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = format.format(date);
System.out.println(format1);
}
}
文件的遍历
public String[] list ():获取指定目录下的所有文件或者文件夹的名称的数组
public class MyTest {
public static void main(String[] args) {
//public String[] list ():获取指定目录下的所有文件或者文件夹的名称的数组
File file = new File("E:\\test");
//把此目录下的所有文件或文件夹全部放到,数组中
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
}
}
public File[] listFiles ():获取指定目录下的所有文件或者文件夹的File数组
相比 public String[] list ()更加灵活
public class MyTest2 {
public static void main(String[] args) {
//public File[] listFiles ():获取指定目录下的所有文件或者文件夹的File数组
File file = new File("E:\\test");
File[] files = file.listFiles();
for (File f : files) {
String name = f.getName();
System.out.println(name+"== 大小"+f.length());
}
}
}
- 案例演示:
- 需求:判断E盘demo目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
- 利用listFiles
public class MyTest {
public static void main(String[] args) {
//A:利用listFiles
File file = new File("E:/demo");
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile() && f.getName().endsWith(".jpg")) {
System.out.println(f.getName());
}
}
}
}
- 利用文件过滤器
public class MyTest2 {
public static void main(String[] args) {
File file = new File("E:/demo");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//System.out.println(dir);//父路径
//System.out.println(name);//子文件名
File file1 = new File(dir, name);
if(file1.isFile()&&file1.getName().endsWith(".jpg")){
return true;
}else {
return false;
}
}
});
System.out.println(Arrays.toString(files));
}
}