IO操作概念:
什么是IO操作,一般在程序中用到的数据只是存储在内存中,当程序结束后,存储的数据则会消失,要是让数据永久的存储在硬盘或者持久化设备上,就可以了。
当从程序内存中的数据存储到持久化设备中,此动作称为输出(写入)Output操作。
当从持久化设备中(硬盘)读取到内存中,此动作称为输入(读取)Input操作。
File类:
数据存储在文件中,文件又存储在文件夹中,Java是将文件或者文件夹封装成File对象,File是文件和目录路径名(文件夹)的抽象表现形式。
1.1 File类的构造函数
File(File parent,String child);//参数parent是一个File对象,根据parent抽象路径名和child文件路径名字符串创建一个File实例。
File(String pathname);//根据给定的路径名字符串转换为抽象路径名创建一个新的File实例
File(String parent,String child);//根据给定的抽象路径名字符串和一个child路径名创建一个新的File实例。
三种创建File实例的代码:
import java.io.File;
/*
* java.io.File
* 将操作系统中的,文件,目录(文件夹),路径,封装成File对象
* 提供方法,操作系统中的内容
*/
public class Filedemo {
//File类的构造方法(三种)
//1.File(String pathname)
//2.File(String parent,String child)//传递字符串父路径和子路径,优势在于可以单独的操作父路径和子路径
//3.File(File parent,String child)//传递的路径,传递File类型的父路径,和String类型的子路径,优点在于父路径可以调用File类方法
public static void main(String[] args){
function1();
function2();
}
public static void function1(){
File file = new File("E:\\kankan");
File file1 = new File("E:","qq");
System.out.println(file);
System.out.println(file1);
}
public static void function2(){
File parent = new File("E:");
File file = new File(parent,"haha");
System.out.println(file);
}
}
1.2 File类方法
File方法有很多种,其中分为File类的获取方法,即获取文件相关信息。
String getAbsolutePath();//返回此抽象路径名的绝对路径名字符串。
String getName();//返回此抽象路径名的文件或目录名称
String getPath();//返回此抽象路径名转化为一个路径名字符串
long length();//返回此抽象路径名表示的文件的长度。
public class FileMethodDemo {
public static void main(String[] args) {
//创建文件对象
File file = new File("Test22.java");
//获取文件的绝对路径,即全路径
String absPath = file.getAbsolutePath();
//File中封装的路径是什么获取到的就是什么。
String path = file.getPath();
//获取文件名称
String filename = file.getName();
//获取文件大小
long size = file.length();
System.out.println("absPath="+absPath);
System.out.println("path="+path);
System.out.println("filename="+filename);
System.out.println("size="+size);
}
}
boolean createNewFile();//创建一个空的文件。
boolean mkdir();//创建一个空的文件夹。
boolean delete();//删除抽象路径名表示的文件或目录,并返回一个Boolean值。
boolean isFile();//判断此抽象路径名表示的是不是一个标准的文件。
boolean isDirectory();//判断此抽象路径名表示的是不是一个标准的文件夹,
boolean exists();//判断此抽象路径名表示的文件或者文件夹是否存在。
public class FileMethodDemo2 {
public static void main(String[] args) throws IOException {
// 对文件或者文件加进行操作。
File file = new File("e:\\file.txt");
// 创建文件,如果文件不存在,创建 true 如果文件存在,则不创建 false。 如果路径错误,IOException。
boolean b1 = file.createNewFile();
System.out.println("b1=" + b1);
//-----------删除文件操作-------注意:不去回收站。慎用------
boolean b2 = file.delete();
System.out.println("b2="+b2);
//-----------需要判断文件是否存在------------
boolean b3 = file.exists();
System.out.println("b3="+b3);
//-----------对目录操作 创建,删除,判断------------
File dir = new File("e:\\abc");
//mkdir()创建单个目录。//dir.mkdirs();创建多级目录
boolean b4 = dir.mkdir();
System.out.println("b4="+b4);
//删除目录时,如果目录中有内容,无法直接删除。
boolean b5 = dir.delete();
//只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除。
System.out.println("b5=" + b5);
//-----------判断文件,目录------------
File f = new File("e:\\javahaha");// 要判断是否是文件还是目录,必须先判断存在。
// f.mkdir();//f.createNewFile();
System.out.println(f.isFile());
System.out.println(f.isDirectory());
}
}
方法list()和listFiles()
文件存放在文件夹中,要想获取一个文件夹中的所有文件,包括文件夹中的文件夹内的文件,则就要用到下面的方法,
String[] list(FilenameFilter filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
实例:
public class FileMethodDemo3 {
public static void main(String[] args) {
File dir = new File("e:\\java_code");
//获取的是目录下的当前的文件以及文件夹的名称。
String[] names = dir.list();
for(String name : names){
System.out.println(name);
}
//获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
File[] files = dir.listFiles();
for(File file : files){
System.out.println(file);
}
}
}
FileFilter类
File[] listFiles(FileFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
FileFilter类用于抽象路径名的过滤器,是一个接口类,仅有一个方法,为accept。
即:boolean accpet(File pathname);//测试指定抽象路径名是否包含在某个路径名列表中。
测试类
public class FileDemo2 {
public static void main(String[] args) {
//获取扩展名为.java所有文件
//创建File对象
File file = new File("E:\\code\\day11_code");
//获取指定目录下的文件夹
File[] files = file.listFiles(new FileFileterByDir());
//遍历获取到的所有符合条件的文件
for (File f : files) {
System.out.println(f);
}
}
}
//文件过滤器
class FileFileterByDir implements FileFilter{
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}
FilenameFilter类
实现此接口的类实例可以用于过滤文件名
File[] listFiles(FilenameFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
即:boolean accpet(File dir,String name);//测试指定文件是否包含在某个文件列表中。
测试类
public class FileDemo2 {
public static void main(String[] args) {
//获取扩展名为.java所有文件
//创建File对象
File file = new File("E:\\code\\day11_code");
//获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器
File[] files = file.listFiles(new MyFileFilter());
//遍历获取到的所有符合条件的文件
for (File f : files) {
System.out.println(f);
}
}
}
//定义类实现文件名称FilenameFilter过滤器
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}