文件类的概述
文件就是保存数据的地方
文件流
输入流:数据从数据源文件到程序内存的路径
输出流:数据从程序到数据源文件的路径
对象在new实例后,只是在内存中创建了一个文件,只有在执行了相应的方法后才会在硬盘中创建文件实体。
目录被当做文件处理、
delect只能删除空的文件目录
创建一级目录使用mkdir,多级目录使用mkdirs
File类
文件和目录路径名的抽象表示 java把电脑中的文件和目录封装为了一个File类 我们可以使用该类对文件和文件夹进行操作
file:文件 directory 文件夹
路径分为绝对路径和相对路径
绝对路径由盘符开始的一步一步到目标文件
相对路径是相对于当前项目的根目录 路径可以简化书写
路径不分大小写
File(String parent ,Sting child )根据parent路径名字字符串和child路径名字字符串创建一个新的File实例,两个参数把路径分为两部分 父路径和子路径
三种构造方法
public class Demo {
public static void main(String[] args) {
//构造方法
show01();
show02("d:\\","a.txt");
show03();
}
private static void show03() {
File parent = new File("d:\\");
File f3 = new File(parent,"4.txt");
System.out.println(f3);
}
private static void show02(String s, String s1) {
File f2=new File(s,s1);
System.out.println(f2);
}
private static void show01() {
File f1=new File("D:\\io\\demo\\1.txt");
System.out.println(f1);//重写了object类中的tostring方法
File f2=new File("2.txt");
System.out.println(f2);
System.out.println(f2.getPath());
}
}
获取功能的方法
1.getAbsolutePath 返回次file的绝对路径名字符串
2.getpath 将此file转化为路径名字字符串
3.getName返回由此file表示的文件或目录的名称
4.length 返回此文件的长度 该长度的单位以字节为单位
判断功能的方法
1.exists 判断文件的路径是否存在
2.isDirectroy判断文件是否为目录
3.isFile判断是否为文件
public static void main(String[] args) {
show01();
}
private static void show01() {
File f1=new File("d:\\io\\demo\\1.txt");
System.out.println(f1.getAbsoluteFile());
System.out.println(f1.getPath());
System.out.println(f1.getName());
System.out.println(f1.length());
System.out.println(f1.isDirectory());
System.out.println(f1.isFile());
System.out.println(f1.exists());
}
运行结果·
创建和删除功能的方法
1.createNewFile :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件夹
2.delect 删除由此file表示的文件或者目录
3.mkdir创建由此file表示的目录 创建单级文件夹
4.mikdir创建由此file表示的目录和文件,包括任何必须但不存在的父目录
使用文件夹创建的都为文件夹 不能只看名称 要看文件的类型
在使用删除文件时 只能删除最后一级文件目录
遍历目录功能
list()返回一个字符串的数组 表示该file目录中的所有子文件或目录
listFiles返回一个File数组,表示该file目录中所有的子文件或目录
可以获取到隐藏的文件夹
public class Demo3 {
public static void main(String[] args) {
/* File file=new File("D:\\io\\demo");
String [] arr=file.list();
for (String filename:arr) {
System.out.println(filename);
}*/
File file=new File("D:\\io\\demo");
File files[]=file.listFiles();
for (File f:
files) {
System.out.println(f);
}
}
}
遍历文件目录
package day.stu.zc.IO.file;
import java.io.File;
public class Demo4 {
public static void main(String[] args) {
File file=new File("D:\\io\\demo");
getAllFiles(file);
}
/*
*
* 定义一个方法 方法对目录进行遍历
* */
public static void getAllFiles(File dir){
File[] file=dir.listFiles();
for (File f:
file) {
if(f.isDirectory()){
getAllFiles(f);
}
else{
System.out.println(f);
}
}
}
}
文件过滤器
使用过滤器
FileFileter
public class FileFileter1 {
public static void main(String[] args) {
File file=new File("D:\\io\\demo");
getAllFiles(file);
}
public static void getAllFiles(File dir){
File[] file=dir.listFiles(new FileFileterImpl());
for (File f:
file) {
if(f.isDirectory()){
getAllFiles(f);
}
else{
System.out.println(f);
}
}
}
}
public boolean accept(File pathname) {
if(pathname.isDirectory()){
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");
}
}
在接口只有一个抽象方法时 可以使用lambda来优化函数 即不用创建接口实现类 直接在主函数中写匿名类
package day.stu.zc.IO.file;
import java.io.File;
import java.io.FilenameFilter;
public class FileFileter {
public static void main(String[] args) {
File file=new File("D:\\io\\demo");
getAllFiles(file);
}
public static void getAllFiles(File dir){
/* File[] file=dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
}
});*/
File [] file=dir.listFiles((File pathname)->pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java"));
// File[] file=dir.listFiles(( d, name)-> new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java"));
for (File f:
file) {
if(f.isDirectory()){
getAllFiles(f);
}
else{
System.out.println(f);
}
}
}
}