File类中的java.io包是唯一代表磁盘文件本身的对象,能够创建、删除或重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间等。
File类的常用的构造方法
1.1 创建File对象
所有的构造方法都需要传入文件的路径。如上图,如果程序只处理一个目录或文件,并且知道该目录或文件的路径,使用第一个构造方法较方便。如果程序处理的是一个公共目录中的若干子目录或文件,那么使用第二个或者第三个构造方法会更方便。
【案例】,
需要注意的是在创建File文件时传入的路径使用了" \\ " ,这是因为在windows中目录符号为反斜线" \ ",但反斜线在java中是特殊字符,表示转义符,所以使用反斜线时,前面应该再添加一个反斜线,即为" \\ ",除此之外,目录符号还可以用正斜线" / "表示,如:src/Hello.java
import java.io.File;
public class test{
public static void main (String[] args){
File f = new File("E:\Java base\第七章IO\a.txt"); //使用绝对路径构造File对象
File f1=new File("src\Hello.java"); //使用相对路径构造File对象
System.out.println(f);
System.out.println(f1);
}
}
【运行结果】
1.2 File类的常用方法
File类提供了一系列方法,用于 *** 作其内部封装的路径指向的文件或目录。例如,判断文件或目录是否存在,文件的创建于删除文件等,如下图:
【案例】
import java.io.File;
import java.io.IOException;
public class test{
public static void main (String[] args)throws IOException{
File f = new File("E:\Java base\第七章IO\b.txt"); //使用绝对路径构造File对象
if(f.exists()){ //如果存在这个文件就删除,否则就创建
f.delete();
}else{
System.out.println(f.createNewFile());
}
//在磁盘下创建一层目录,并且在目录下创建文件
File fileDemo=new File("E:\Java base\第七章IO\hello\b.txt");
if(!(fileDemo.getParentFile().exists())){ //判断E:\Java base\第七章IO\hello\目录是否存在
fileDemo.getParentFile().mkdir();
}
if(fileDemo.exists()){ //如果存在这个文件就删除,否则就创建
fileDemo.delete();
}else{
System.out.println(fileDemo.createNewFile());
}
}
}
【运行结果】
1.3 遍历目录下的文件
File类的list()方法用于遍历指定目录下的所有文件。
【案例】
import java.io.File;
import java.io.IOException;
public class test{
public static void main (String[] args)throws IOException{
//创建File对象
File f = new File("E:\Java base\第七章IO");
if(f.isDirectory()){ //判断File对象对应的目录是否存在
String[] names=f.list(); //获得目录下的所有文件的文件名
for (String name:names){
System.out.println(name); // 输出文件名
}
}
}
}
【运行结果】
下面通过一个案例来演示如何遍历指定目录下所有扩展名为" .java "的文件。
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
public class test{
public static void main (String[] args)throws IOException{
//创建File对象
File f = new File("E:\Java base\第七章IO");
//创建过滤器对象
FilenameFilter filter = new FilenameFilter() {
//实现accept()方法
public boolean accept (File dir,String name){
File currFile = new File(dir, name);
// 如果文件名以.java结尾返回true,否则返回false
if (currFile.isFile()&&name.endsWith(".java")){
return true;
}else{
return false;
}
}
};
if (f.exists()){ // 判断File对象对应的目录是否存在
String[] lists=f.list(filter); //获得过滤后的所有文件名数组
for(String name:lists){
System.out.println(name);
}
}
}
}
【运行结果】
前面两个案例演示的都是遍历目录下文件的文件名,有时候在一个目录下,除了文件,还有子目录,如果想得到所有子目录下的File类对象,list()方法显然不能满足要求,这时需要使用FIle类提供的另一种方法listFiles()。
listFiles()方法返回一个File对象数组,当对数组中的元素进行遍历时,如果元素中还有子目录需要遍历,则需要使用递归。
【案例】
调用listFiles()方法把该目录下所有的子目录和文件存到一个File类型的数组fires中,在通过for循环遍历数组files,并对当前遍历的File对象进行判断,如果是目录就重新调用fileDir()方法进行递归,如果是文件就直接打印输出文件的路径,这样就成功遍历了该目录下所有的文件。
import java.io.File;
import java.io.IOException;
public class test{
public static void main (String[] args)throws IOException{
File file=
new File("E:\Java base\第七章IO");
fileDir(file); //调用FileDir方法
}
public static void fileDir(File dir){
File[] files = dir.listFiles(); //获得表示目录下所有文件的数组
for (File file :files){ //遍历所有的子目录和文件
if(file.isDirectory()){
fileDir(file); //如果是目录,递归调用fileDir()
}
System.out.println(file.getAbsolutePath()); //输出文件的绝对路径
}
}
}
【运行结果】
这样就遍历到了所有的文件
1.4 删除文件及目录
【案例】
import java.io.File;
import java.io.IOException;
public class test{
public static void main (String[] args)throws IOException{
File file= new File("E:\Java base\第七章IO\hello");
if(file.exists()){
System.out.println(file.delete());
}
}
}
【运行结果】
运行结果中输出了false,这说明删除文件失败了,原因在于File类的delete()方法只能删除一个指定的文件,如果File对象代表目录,并且目录下包含子目录或者文件,则File类的detele()方法不允许直接删数这个目录。
这时候我们需要使用递归的方式来进行删除了
import java.io.File;
import java.io.IOException;
public class test{
public static void main (String[] args)throws IOException{
File file= new File("E:\Java base\第七章IO\hello");
deleteDir(file); // 调用deleteDir删除方法
}
public static void deleteDir(File dir){
if (dir.exists()){ //判断传入的File对象是否存在
File[] files=dir.listFiles(); //得到FIle数组
for(File file:files){ //遍历所有的子目录和文件
if(file.isDirectory()){
deleteDir(file); //如果是目录,则递归调用deleDir()
}else{
//如果是文件,则直接删除
file.delete();
}
}
// 删除完一个目录里的所有文件后,就删除这个目录
dir.delete();
}
}
}
【运行结果】
可以发现,该目录已经被删除了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)