有些数据想长久保存起来,咋整?
文件时非常重要的存储方式,在计算机硬盘中。
即便断电,或者程序终止了,存储在硬盘文件中的数据也不会丢失。
File 是Java.io.包下的类,File类对象,用于代表当前操作系统的文件(可以是文件、文件夹)
获取文件信息(大小、文件名、修改时间)
判断文件的类型
创建文件/文件夹
删除文件/文件夹
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。
用于读写数据的(可以读写文件,或网络中的数据…)
创建File类对象
构造器 | 说明 |
---|---|
public File (String pathname) | 根据文件路径创建文件对象 |
public File(String parent,String child) | 根据父路径和子路径名字创建文件对象 |
public File(File parent,String child) | 根据父路径对应文件对象和子路径名字创建文件对象 |
public class FileTest1{
public static void main(String[] args)
{
//1、创建一个File对象,指代某个具体文件
//路径分隔符
//File f1 = new File("D:/resource/ab.text");
//File f1 = new File("D:\\resource\\ab.txt");
File f1 = new File("D:"+ File.sparator+"resource"+File.separator+"ab.txt");
System.out.println(f1.length());
File f2 = new File("D:/resource");
System.out.println(f2.length());
File f3 = new File("D:/resource/aaaa.txt");
System.out.println(f3.length());
System.out.println(f3.exists);//false
//我现在要定位的文件是在模块中,应该怎么定位呢?
//绝对路径 :带盘符的
//File f4 = new FIle("D:\\code\\javaspromax\\file-io-app\\src\\itheima.txt");
//相对路径(重点):不带盘符,默认是直接去工程下寻找文件。
File f4 = new File("file-io-app\\src\\ithema.txt");
System.out.println(f4.length());
}
}
构造器 | 说明 |
---|---|
public File (String pathname) | 根据文件路径创建文件对象 |
public File (String parent,String child) | 根据父路径和子路径名字创建文件对象 |
public File(File parent,String child) | 根据父路径对应文件对象和子路径名字创建文件对象 |
File 封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在的。
public class FileTest1{
public static void main(String[] args)
{ //创建一个具体File对象,指代某一个文件
//1、 File f1 = new File("D:\\resouerce\\ab.txt");
File f1 = new File("D:\\resource\\ab.txt");
File f1 = new File("D:" + File.separator+"resource"+File.sparator+"ab.txt");
File f2 = new File("D:/resuorce");
System.out.println(f2.length());
//注意File对象可以指代一个不存在的文件路径
File f3 = new File("D:/resource");
System.out.println(f3.length());
System.out.println(f3.exists());
//我现在要定位文件实在文件是在模块中,该如何定位
//绝对路径:带盘符的
//File4 f4 = new File("D:\\code\\javasepromax\\file-io-app\\src\\itheima.txt");
//相对路径(重点),不带盘符的,默认直接工程下寻找文件
File f4 = new File("file-io-app-src-itheima.txt");
()
}
}
方法名称 | 说明 |
---|---|
public String[] list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles() | 获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回 (重点) |
当主调是文件,或者路径不存在时,返回NULL
当主调时空文件夹时,返回一个长度为0的数组
当主调是一个有内容的文件夹时,将里面所有的一级文件和文件夹的路径放在File数组中返回
当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当主调是一个文件夹时,返回null
概述:
封装一个磁盘路径字符串,对这个路径可以执行一次操作
可以封装文件路径、文件夹路径、不存在的路径
创建对象
File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新的File实例
new File(“d:/abc/a.txt”);
new File(“d:/abc”,”a.txt”);
常用方法
创建:
createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。
mkdir() 在指定位置创建一个单级文件夹。
mkdirs() 在指定位置创建一个多级文件夹。
renameTo(File dest)如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名, 如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹。
删除:
delete() 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值。
deleteOnExit()jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。
判断:
exists() 文件或文件夹是否存在。
isFile() 是否是一个文件,如果不存在,则始终为false。
isDirectory() 是否是一个目录,如果不存在,则始终为false。
isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。
isAbsolute() 测试此抽象路径名是否为绝对路径名。
获取:
getName() 获取文件或文件夹的名称,不包含上级路径。
getAbsolutePath()获取文件的绝对路径,与文件是否存在没关系
length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified()获取最后一次被修改的时间。
文件夹相关:
static File[] listRoots()列出所有的根目录(Window中就是所有系统的盘符)
list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
list(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
listFiles(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
/*常用方法测试*/
public class TestFile {
public static void main(String[] args) throws IOException {
//1.创建File类对象
/*1.ready目录与1.txt需要自己手动创建
* 2.File需要导包:import java.io.File;
* 3.路径是String类型,必须写正确,不然找不到文件
* 4.完整的文件名包含两部分:文件名+后缀名*/
File file = new File("E:\\ready\\1.txt");
//2.1测试File中的常用方法
System.out.println(file.length());//3,获取文件的字节量
System.out.println(file.exists());//true,判断文件是否存在
System.out.println(file.isFile());//true,判断是否为文件
System.out.println(file.isDirectory());//false,判断是否为文件夹
System.out.println(file.getName());//1.txt获取文件名
System.out.println(file.getParent());//E:\ready 获取父级路径
System.out.println(file.getAbsolutePath());//E:\ready\1.txt 获取带盘符的完整路径:绝对路径
//2.2 测试创建与删除
/*new 只会帮你在内存中创建一个File类型的对象
* 并不会帮你在磁盘中创建一个真实存在的2.txt文件*/
file = new File("E:\\ready\\2.txt");
//创建一个之前不存在的文件2.txt,如果创建成功,会返回true
/*如果指定创建文件的路径不对,会抛出异常:java.io.Exception
* 所以需要提前处理这个问题,我们暂时选择在main()上抛出
* 这个IO异常是目前我们遇到的强制要求必须预先处理的异常
* 如果不处理,方法的调用会报错,通不过编译*/
System.out.println(file.createNewFile());//创建之前不存在的文件
file = new File("E:\\ready\\m");
System.out.println(file.mkdir());//创建之前不存在的单层文件夹
file = new File("E:\\ready\\a\\b\\c");
System.out.println(file.mkdirs());//创建之前不存在的多层文件夹
System.out.println(file.delete());//c被删除,删除空文件夹或者文件
file = new File("E:\\ready\\a");
System.out.println(file.delete());//false,a文件夹不是空的,里面有内容
file = new File("E:\\ready\\2.txt");
System.out.println(file.delete());//2.txt被删除,可以删除文件
//2.3测试展示文件列表
file = new File("E:\\ready");
String[] list = file.list();/*不常用*/
System.out.println(Arrays.toString(list));
//这句话会报错,因为这是一个String[],所以数组中每个元素都是String类型的
//那么只能用String类中的方法,而isDirectory()是File类中的方法
//System.out.println(list[0].isDirectory());
File[] fs = file.listFiles();/*常用*/
System.out.println(Arrays.toString(fs));
System.out.println(fs[0].isDirectory());
}
}