一、File文件操作类
听起来我们的文件操作类好像很神奇,可以通过我们的代码直接生成和删除一些东西;但其实它就是一个普通类,要对这个类进行一系列的使用需要实例化对象。对File的实例化对象我们需要用到两个构造方法:
(1)public File(String parthname);
(2)public File(String parent,Stirng child);–>设置子路径和父路径。
1.File类的使用
当我们想要进行文件操作的时候可以通过File类进行:
(1)创建一个新文件:
public boolean createNewFile() throws IOException
(2)判断文件是否存在:
public boolean exists();
(3)删除文件:
public boolean delete();
注意:
(1)File类中的所有对文件操作的方法,都只是改变这个文件本身,但是对文件里面的内容不会改变。
(2)在不同的操作系统文件分隔符、大小写都有区分的:
(a)文件路径分隔符
在windows操作系统下—>
在Linux操作系统下—>/
在Unix操作系统下—>/
(b)路径分隔符
在windows操作系统下——>;
在Linux操作系统下——> :
在Unix操作系统下——>:
(c)文件名的大小写
在windows下文件名部分大小写;
在Linux、Unix操作系统下要七分大小写。
所以,我们在实例化File类的对象的时候对于文件分隔符采用:File.separator;对于路径分隔符,我们采用File.pathSeparator;
2.目录(路径)操作
在File类中关于目录有如下方法:
(1)取得父路径或父File对象:
public String getParent();–》取父路径
public File getParentFile();–》取父File对象
上面两个方法都可以取得父路径,但是若想创建父路径,此时最好取得父路径的File类对象。如果只是单纯的查看父路径的时候我们才使用getParent()方法。
(2)创建目录(无论多少级目录都会创建)
eg:
// 3.文件目录的操作
//separator由不同操作系统下的JVM决定到底使用哪种分隔符
File file=new File("E:"+File.separator+"learn"+File.separator+"javaio"+File.separator+"a1");
//上面写的这个父路径在我的电脑里面是存在的所以,对于下面的这个条件的判断结果是false
if(!file.getParentFile().exists()){//判断父File对象是否存在
file.getParentFile().mkdirs();//-》对象(父File的对象)调用它的方法不管由多少级父目录都创建父目录
}
if(file.exists()){
//当前文件是否存在的判断->我们是定的这个文件a1在这个路径下面是不存的,所以经过下面代码的执行会创建这个文件
file.delete();
}else{
file.createNewFile();
}
**创建文件的另外一种方法:
Path path=Path,get("E","learn","io","a1");
File file=path.toFile();//讲这个获得的路径转化为文件,可以直接获得文件不用进行判断是否为文件。
3.文件信息
在File类里面还提供了许多关于取得文件信息的方法:
(1)判断路径是否是文件:
public boolean isFile();
(2)判断路径是否是目录:
public boolean isDirectory();
(3)取得文件大小(字节):
public long length();
(4)最后一次修改日期:
public long lastModifiled();
eg:
// 4.文件信息
(1)取得文件信息操作
// //这是我们需要进行操作的文件
// File file = new File("E:"+File.separator+"learn"+File.separator+"javaio"+File.separator+"a1");
// //首先对于以上的路径我们并不知道是否为文件,所以需要我们判断这个枯井是否为文件
// if(file.exists()&&file.isFile()){
// System.out.println("文件大小"+file.length());
// System.out.println("最后一次修改日期:"+new Date(file.lastModified()));
// }
// (2)列出目录中的全部组成
//下面是需要操作的文件
File file=new File("E:"+File.separator+"learn"+File.separator+"javaio");
//保证这个目录是存在的
if(file.exists()&&file.isDirectory()){
//列出目录中的所有内容
//listFile()这个方法:file是普通文件返回null;file是目录返回目录下的所有内容(文件以及文件夹)
File[] result=file.listFiles();
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}
}
注意:区分普通文件和目录
4、综合案例(目录列表)
虽然我们的File类提供了listFile()方法,但是这个方法本身只能列出本目录中的第一级信息(就是如果在一个目录的下面出现了文件,在这个目录中还有目录。这个时候就以文件为标准列出所有内容,但是在这个与文件同级的目录里面的内容就不能列出它的信息了)。
这个时候我们采用递归的方法:
//递归打印当前目录下的所有层次的文件信息
File file = new File("E:"+File.separator+"learn"+File.separator+"javaio");
listAllFiles(file);//从此处开始递归
}
public static void listAllFiles(File file){
//将给定目录的文件列出其一级信息,然后再对这些一级信息进行判断,将不是普通文件的再次进行listFile(),直到这个文件为普通文件
if(file.isDirectory()){
File[] result=file.listFiles();//继续列出子目录内容
if(result!=null){
for(File file2:result){
listAllFiles(file2);
}
}
}else{
//给的这个file就是文件,直接打印
System.out.println(file);
}
}
}