IO流
File 类的使用
-
java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
-
File 能新建、删除、重命名文件和目录,但File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
-
想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
-
File对象可以作为参数传递给流的构造器
/**
* 1.File类的理解
* 1. File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
* 2. File类声明在java.io包下
* 3. File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,
* 并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。
* 4. 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点".
*/
File 类的使用:常用构造器
public File(String pathname)
-
以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
-
绝对路径:是一个固定的路径,从盘符开始
-
相对路径:是相对于某个位置开始
-
public File(String parent,String child)
- 以parent为父路径,child为子路径创建File对象。
public File(File parent,String child)
根据一个父File对象和子文件路径创建File对象
public class FileTest {
/*
2.File的实例化
2.1 常用构造器
File(String filePath)
File(String parentPath,String childPath)
File(File parentFile,String childPath)
2.2 路径的分类
相对路径:相较于某个路径下,指明的路径。
绝对路径:包含盘符在内的文件或文件目录的路径
说明:
IDEA中:
如果大家开发使用JUnit中的单元测试方法测试,相对路径即为当前Module下。
如果大家使用main()测试,相对路径即为当前的Project下。
Eclipse中:
不管使用单元测试方法还是使用main()测试,相对路径都是当前的Project下。
*/
@Test
public void test1(){
//构造器1:
File file1 = new File("hello.txt");//相对于当前的Module
File file2 = new File("D:\\code\\20210107\\Hello\\hehe.txt");
System.out.println(file1);
System.out.println(file2);
//构造器2:
File file3 = new File("D:\\code\\20210107","Hello");
System.out.println(file3);
//构造器3:
File file4 = new File(file3,"hi.txt");
System.out.println(file4);
}
File 类的使用:路径分隔符
-
路径中的每级目录之间用一个路径分隔符隔开。
-
路径分隔符和系统有关:
-
windows和DOS系统默认使用“\”来表示
-
UNIX和URL使用“/”来表示
-
-
Java程序支持跨平台运行,因此路径分隔符要慎用。
-
为了解决这个隐患,File类提供了一个常量:
public static final String separator。根据操作系统,动态的提供分隔符。
-
举例:
File file1= new File("d:\\atguigu\\info.txt");
File file2= new File("d:"+ File.separator+ "atguigu"+ File.separator+ "info.txt");
File file3= new File("d:/atguigu");
File 类的使用:常用方法
File类的获取功能
-
public String getAbsolutePath():获取绝对路径
-
public String getPath():获取路径
-
public String getName():获取名称
-
public String getParent():获取上层文件目录路径。若无,返回null
-
publicl ong length():获取文件长度(即:字节数)。不能获取目录的长度。
-
public long lastModified():获取最后一次的修改时间,毫秒值
如下两个方法适用于文件目录:
-
public String[] list():获取指定目录下的所有文件或者文件目录的名称数组
-
public File[] listFiles():获取指定目录下的所有文件或者文件目录的File数组
//- public String get AbsolutePath():获取绝对路径
File file1 = new File("hello.txt");
File file2 = new File("D:\\code\\others\\files\\hi.txt");
System.out.println(file1.getAbsolutePath());//D:\code\20210107\Hello\hello.txt
System.out.println(file2.getAbsolutePath());//D:\code\others\files\hi.txt
//- public String getPath():获取路径
System.out.println(file1.getPath());//hello.txt
System.out.println(file2.getPath());//D:\code\others\files\hi.txt
//- public String getName():获取名称
System.out.println(file1.getName());//hello.txt
System.out.println(file2.getName());//hi.txt
//- public String getParent():获取上层文件目录路径。若无,返回null
System.out.println(file1.getParent());//null
System.out.println(file2.getParent());//D:\code\others\files
//- public long length():获取文件长度(即:字节数)。不能获取目录的长度。
System.out.println(file1.length());//10
System.out.println(file2.length());//0
//- public long lastModified():获取最后一次的修改时间,毫秒值
System.out.println(new Date(file1.lastModified()));//Wed Mar 03 23:54:20 CST 2021
System.out.println(file2.lastModified());//0
//- public String[] list():获取指定目录下的所有文件或者文件目录的名称数组
File file = new File("D:\\code01");
String[] list = file.list();
for(String s : list){
System.out.println(s);
}
//Project01FamilyAccount
//Project02
//- public File[] listFiles():获取指定目录下的所有文件或者文件目录的File数组
File[] files = file.listFiles();
for(File f : files){
System.out.println(f);
}
//D:\code01\Project01FamilyAccount
//D:\code01\Project02
File类的重命名功能
- publicbooleanrenameTo(Filedest):把文件重命名为指定的文件路径
/*
File类的重命名功能
- public boolean renameTo(File dest):把文件重命名为指定的文件路径
比如,file1.renameTo(file2)为例:
要想返回值为true,需要file1在硬盘中存在,且file2不能在硬盘中存在
*/
@Test
public void test3(){
File file1 = new File("Hello.txt");
File file2 = new File("D:\\code\\others\\files\\heihei.txt");
boolean b = file1.renameTo(file2);
System.out.println(b);//true
}
}