1、文件管理
1.文件管理概述
Java中的对文件的管理,通过java.io包中的File类实现。Java中文件的管理,主要是针对文件或是目录路径名的管理,包括文件的属性信息,文件的检查,文件的删除等,但不包括文件的访问。
2. File类
Java类库中的File类可以对文件系统中的文件和目录进行操作,它属于java.io这个包。一个File对象可以代表一个文件,也可以代表一个目录。创建了一个File对象后,如果是目录,可以显示目录清单,新建或删除目录;如果是文件,可以查询文件的属性和路径信息,也可以输出和改名,但没有拷贝功能。拷贝属于文件的读写,要用I/O流类来解决。 File类能够解决文件管理的所有问题,下面就来介绍一下这个类。
File类的数据成员主要有下列4个,它们都是类变量:
static String pathSeparator ";" 路径分隔符
static Char pathSeparatorChar ';' 路径分隔符,字符分号而不是字符串
static String separator "\" 路径表达式中的分隔符,如WINDOWS系统中是反斜杠
static Char separatorChar '\' 字符型的路径表达式中的分隔符(反斜杠)
1) File类的构造方法
public java.io.File(String pathName)
public java.io.File(String parent,String fileName)
public java.io.File(File parent,String fileName)
第一个构造方法通过全路径文件名来创建对象,pathName可以是绝对路径也可以是相对的。
第二个构造方法通过父目录和文件名来创建对象,fileName是不含路径的文件名。
第三个构造方法也是通过父目录和文件名来创建对象,但父目录由一个File对象提供。
【例】本例程演示用三种构造方法创建File对象。
import java.io.*;
public class FileCons {
public static void main(String[] args) {
//第一种方式
File path=new File("c:\\");
File file1=new File("c:\\sss.txt");
//第二种方式
File file2=new File("c:\\","sss.txt");
//第三种方式
File file3=new File(path,"sss.txt");
}
}
程序分析:path,file1、file2、file3分别使用三种构造方法来创建File类对象。
2) File类中的常用方法
File类常用方法如表所示。
方法 | 含义 |
boolean createNewFile() | 当且仅当不存在具有此抽象路径名指定的名称的文件时,创建由此抽象路径名指定的一个新的空文件。 |
static File createTempFile(String prefix,String suffix) | 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称 |
static File createTempFile(String prefix,Stirng suffix,File directory) | 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称 |
boolean exists() | 测试此抽象路径名表示的文件或目录是否存在 |
boolean delete() | 删除此抽象路径名表示的文件或目录 |
boolean equals(Object obj) | 测试此抽象路径名与给定对象是否相等 |
boolean canRead() | 测试应用程序是否可以读取此抽象路径名表示的文件 |
boolean canWrite() | 测试应用程序是否可以修改此抽象路径名表示的文件 |
String[] list() | 返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组 |
String getAbsolutePath() | 返回抽象路径名的绝对路径名字符串 |
String getName() | 返回由此抽象路径名表示的文件或目录的名称,不包括路径名称 |
String getPath() | 将此抽象路径名转换为一个路径名字符串 |
File[] listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件 |
boolean renameTo(File dest) | 重新命名此抽象路径名表示的文件 |
long length() | 返回由此抽象路径名表示的文件的大小,以byte为单位 |
boolean mkdir() | 创建此抽象路径名指定的目录 |
boolean mkdirs() | 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。注意,如果此操作失败,可能已成功创建了一些必需的父目录 |
【注意】File类中的一些方法声明抛出异常,因此在调用这些方法时必须使用try…catch语句块。
下面分类详细介绍下其中常用方法的使用。
(1) 创建和删除
利用File对象可以很方便地创建和删除目录,也可以创建一个空文件和删除文件。这些方法都返回boolean值以告知操作是否成功。方法列表如下:
boolean mkdir() //创建一个新目录,不包括子目录
boolean mkdirs() //创建目录及子目录,即一次可以创建多级目录
boolean createNewFile() //创建一个新的空文件
boolean delete() //删除一个空目录或文件
boolean renameTo(File) // 目录或文件改名
如果要删除的目录非空,目录无法成功删除,但不抛出异常。如果要删除的文件或目录不存在则不抛出异常。如果要创建的空文件名已经存在,也不抛出异常。下面的示例演示创建工作。
【例】 创建一个目录。
import java.io.*;
public class DirCreate {
public static void main(String[] args) {
//1、文件实例化File(path,filename)
File path=new File("d:/java/io"); //目录
//2、如果目录不存在
if(!path.exists()){
System.out.println("目录不存在,开始创建目录");
//path.mkdir(); //先创建目录 注意:mkdir一次只能创建一个
path.mkdirs(); //mkdirs可以一次创建多级目录(目录及父目录)
}
}
}
程序运行结果:在C:\root$dir下创建如下目录:
程序分析:mkdir()是创建一级目录,mkdirs创建目录及子目录
createNewFile()创建文件。
【例】 删除上例建立的所有子目录和文件,留下“根目录”并改名。
import java.io.*;
class Test03 {
public static void main(String[] args) {
//1、文件实例化
File path=new File("d:/java/io");//目录
//2、如果目录不存在
if(!path.exists()){
System.out.println("目录不存在,开始创建目录");
path.mkdirs();
}
String filename="test01.txt";
File f=new File(path,filename);
if(f.exists()){ //如果文件存在 打印文件已存在
System.out.println("文件已存在,可以进行后续操作了");
f.renameTo(new File(path,"test02.txt"));
System.out.println("重命名已完成");
//f.delete(); //删除功能学生自行测试
}else{ //如果文件不存在 就需要创建文件
try {
boolean result=f.createNewFile();
if(result){//result==true
System.out.println("文件创建成功");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行结果:
第一次
目录不存在,开始创建目录
文件创建成功
第二次
文件已存在,可以进行后续操作了
重命名已完成
(2)文件属性测试
File类提供了许多方法给出File对象所对应的文件的各种属性。其中一类是判断性的,大多数无参数都返回 boolean值。这些方法有:
canRead() //可读否
canWrite() //可写否
exists() //File对象存在吗
isDirectory() //是目录吗
isFile() //是文件吗
isAbsolute() //有File(parent, filename)构建器创建对象时给出的是绝对路径吗
isHidden() //是隐含文件吗
SetReadOnly() //设置为只读文件吗
另一类返回字符串,如文件名和路径等。它们有:
getName() //不含路径的文件名
getPath() //路径文件名
getParent() //父目录名
getAbsolute() //返回绝对路径
toString() //返回File对象的信息
最后还有几个方法是:
long length() //返回文件长度(字节数)
long lastModified() //返回文件的最后修改时间
int compareTo(File f) //比较两个File对象,而不是比较文件内容
boolean equals(Object o) //自Object类继承而来的方法
下面我们有一个程序来演示部分常用方法的用法。
【例】测试或获取文件属性信息。
import java.io.File;
import java.io.IOException;
public class File1Properties {
static void printProperty(File f){
System.out.println("可读属性:" + f.canRead());
System.out.println("可写属性:" + f.canWrite());
System.out.println("文件路径:" + f.getPath());
System.out.println("文件名字:" + f.getName());
System.out.println("绝对路径:" + f.getAbsolutePath());
System.out.println("是否隐藏:" + f.isHidden());
System.out.println("文件大小" + f.length());
System.out.println("最后一次修改时间:" + f.lastModified());
System.out.println("-----------------------------------------");
}
public static void main(String[] args){
//1、文件实例化 (path,filename)
File path=new File("d:\\java\\io");//目录
//2、如果目录不存在
if(!path.exists()){
System.out.println("目录不存在,开始创建目录");
path.mkdirs();
}
String filename="text01.txt";
File f=new File(path,filename);
if(f.exists()){ //如果文件存在 打印文件已存在
System.out.println("文件已存在,可以进行后续操作了");
printProperty(f);
}else{ //如果文件不存在 就需要创建文件
try {
boolean result=f.createNewFile();
if(result){ //result==true
System.out.println("文件创建成功");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
程序运行后会显示如下:
文件已存在,可以进行后续操作了
可读属性:true
可写属性:true
文件路径:d:\java\io\text01.txt
文件名字:text01.txt
绝对路径:d:\java\io\text01.txt
是否隐藏:false
文件大小0
最后一次修改时间:1650416246331
(3) 显示目录清单
显示目录清单用list()方法,它有两种形式。一种是无参数的,它返回File对象的所有文件和子目录。另一个用过滤器参数,只返回符合条件的文件和子目录列表。
- String[] list()
【例】简单的目录列表,显示当前目录的父目录的清单。
import java.io.*;
public class DirList {
public static void main(String args[]) {
File path = new File("d:\\java24");
if (path.exists()) {// 目录存在
// 列出目录下的所有文件
File[] files = path.listFiles();
// 循环打印各文件情况 用for循环
for (File f : files) {
// 可以通过get方法获取一些属性
System.out.println(f.getName());
}
}
}
程序运行结果:
第11章文件与流.docx
第12章 多线程编程.docx
第13章 网络编程.docx
第14章 Java7新特性简介.docx
第15章 JDBC.docx
程序分析:
类TestFile创建了File类的两个对象path和f,通过这两个对象去访问当前目录下已经存在的path目录和path目录下的text01.txt文件。程序利用对象中的方法,可以打印对象的一些常用属性,也可以在用完之后执行删除操作