在变量、数组、和对象中存储的数据是暂时存在的,程序结束后他们就会丢失.为了能够永久地保存程序创建的数据,需要将其保存在磁盘文件中,这样就可以在其他程序中使用他们.

Java 的I/O技术可以将数据保存到文本文件、二进制文件和ZIP压缩文件中.



一、文件操作


java.io.File用于获取文件的内容或者属性,不能用于访问文件的内容.


1.1 创建File对象

(1) File(String pathname)

通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例.

抽象路径应尽量使用相对路径,并且目录的层级分隔符不要直接写"/"或"\",应使用File.separator这个常量表示,以避免不同系统带来的差异.

File file = new File("." + File.separator + "demo.txt");

 
 (2) File(parent,child) 
 
File(File parent,String child)


根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
第一个参数: 当前文件所属的目录.
第二个参数: 当前文件的名字. File dir = new File("demo"); File file = new File(dir,"a.txt");

1.2 File表示文件信息

(1) isFile() 
 
File的isFile方法用于判断当前File对象表示的是否为一个文件. 
 
该方法若返回true,这表示File表示的是一个文件. 
 
System.out.println(file.isFile()?"是一个文件":"不是一个文件");//是一个文件(2) length()   
File的length方法用于返回由此抽象路径名表示的文件的长度.
 
 该方法返回的long值表示该文件所占用的字节量. 
 
System.out.println(file.length());//8 
 (3) exists() 
 
File的exists方法用于测试此抽象路径名表示的文件或目录是否存在. 
 
若该File表示的文件或目录存在则返回true,否则返回false. 
 
System.out.println(file.exists());//true 
 (4) createNewFile() 
 
File的createNewFile方法用于当前文件不存在时,创建新的空文件. 
 
返回值:如果指定的文件不存在并成功地创建,则返回 true.如果指定的文件已经存在,则返回 false. 
 
System.out.println(file.createNewFile());//false 
 (5) delete() 
 
File的delete方法用于删除此抽象路径名表示的文件或目录. 
 
返回值:当且仅当成功删除文件或目录时,返回true;否则返回false. 
 
如果当前对象为目录.该方法只能删除空目录. 
 
System.out.println(file.delete());//true 
 (6) getParentFile() 
 
File的getParentFile()方法用于获取当前File的父目录. 
 
File file = new File(
            "a" + File.separator +
            "b" + File.separator +
            "c" + File.separator +
            "d" + File.separator +
            "e" + File.separator +
            "f.txt");
System.out.println(file.getParentFile());//a\b\c\d\e(7) getName()
 
 File的getName()方法用于获取当前File对象的名称. 
 
File file = new File(
            "dir" + File.separator +
            "file.txt"
            );
System.out.println(file);//dir\file.txt
System.out.println(file.getName());//file.txt


1.3 File表示目录信息


(

1) isDirectory() 
 
File的isDirectory方法用于判断当前File对象表示的是否为一个目录. 
 
该方法若返回true,这表示File表示的是一个目录. 
 
System.out.println(file.isDirectory()?"是一个目录":"不是一个目录");//不是一个目录 
 (2) mkdir() 
 
File的mkdir方法用于创建此抽象路径名指定的目录. 
 
返回值:成功创建目录时,返回true;否则返回false. 
 
File dir = new File("." + File.separator + "demo");
System.out.println(dir.mkdir());//true 
 (3) mkdirs() 
 
File的mkdirs方法用于创建多层目录. 
 
返回值: 创建成功,返回true;否则返回false. 
 
File dir = new File("." + File.separator + "demo" + File.separator + "demo1");
System.out.println(dir.mkdirs());//true 
 操作失败时也可能已经成功地创建了一部分必需的父目录. 
 
(4) delete() 
 
File的delete方法是用于删除此抽象路径名表示的文件或目录. 
 
与File表示文件信息delete()方法相同. 
 
(5) listFiles() 
 
File的listFiles方法用于返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件. 
 
返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录.如果目录为空,那么数组也将为空. 
 
如果抽象路径名不表示一个目录,或者发生I/O错误,则返回null. 
 
System.out.println(Arrays.toString(dir.listFiles()));//[.\demo\a.txt, .\demo\b.txt, .\demo\demo1] 
 (6) File[] listFiles(FileFilter  filter) 
 
重载 listFiles() 
 
FileFilter存在于java.io.FileFilter. 
 
通过listFiles方法我们可以获取一个目录下的所有子项,但有些时候我们并不希望获取全部子项,而是想获取部分满足我们实际需求的子项时. 
 
FileFilter是用于抽象路径名的过滤器. 
 
 
 System.out.println(
            Arrays.toString(
                dir.listFiles( new FileFilter(){
                    @Override
                    public boolean accept(File pathname) {
                        return pathname.getName().endsWith("txt");
                    }
                }
                )
            )
    );//[.\demo\a.txt, .\demo\b.txt 
 该方法的参数FileFilter实例的accept方法并进行过滤,listFiles方法会将所有accept方法返回true的子项保留并返回.