java之IO流(file)
一.IO概述
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作称为IO操作。
二.File类的构造函数
File(File parent,String child)
根据parent抽象路径名和child路径名字符串创建一个新的file实例
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新的file实例
File(String parent,String child)
根据parent路径名字符串和child路径名字符串创建一个新的file实例
public class FileDemo { public static void main(String[] args) { //File构造函数演示 String pathName = "e:\\java_code\\day22e\\hello.java"; File f1 = new File(pathName);//将Test22文件封装成File对象。注意;有可以封装不存在文件或者文件夹,变成对象。 System.out.println(f1); File f2 = new File("e:\\java_code\\day22e","hello.java"); System.out.println(f2); //将parent封装成file对象。 File dir = new File("e:\\java_code\\day22e"); File f3 = new File(dir,"hello.java"); System.out.println(f3); } }
三.File类的获取
创建完了File对象之后,File类中都有如下常用方法,可以获取文件相关信息
getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。(String )
getName() 返回由此抽象路径名表示的文件或目录名称。(String )
getPath() 将此抽象路径名转换为一个路径名字符串。(String )
length() 返回由此抽象路径名表示的文件的长度。(long)
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
creatNewFile() 当且仅当不存在具有此抽象路径名指定名称文件时,不可分地创建一个新的空文件。
delete() 删除此抽象路径名表示的文件或目录。
exists() 测试此抽象路径名表示的文件或目录是否存在。
isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
mkdir() 创建此抽象路径名指定的目录。
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()); } }
五.listFiles()方法介绍
list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。( String[] )
listFiles() 返回一个抽象路径数组,这些路径名表示此抽象路径名表示的目录中的文件。( File[] )
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); } } }
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1.指定的目录必须是存在的,
2.指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException
六.文件过滤器
listFiles( FilenameFileter filter ) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。( File[] )
接口 FilenameFilter 实现此接口的类实例可用于过滤器文件名
accept( File dir , String name ) 测试指定文件是否应该包含在某一文件列表中。( boolean )
//测试类 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过滤器接口 //定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }
listFiles( FileFileter filter ) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。( File[] )
接口 FileFilter 用于抽象路径名的过滤器
accept( File pathname ) 测试指定抽象路径名是否应该包含在某个路径名列表中。( boolean )
FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。
FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象
当我们需要过滤文件名称时就可以使用FilenameFilter这个过滤器,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器。
//测试类 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); } } }
//自定义类继承FileFilter过滤器接口 //文件过滤器 class FileFileterByDir implements FileFilter{ public boolean accept(File pathname) { return pathname.isDirectory(); } }