在变量、数组、和对象中存储的数据是暂时存在的,程序结束后他们就会丢失.为了能够永久地保存程序创建的数据,需要将其保存在磁盘文件中,这样就可以在其他程序中使用他们.
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的子项保留并返回.