1.在实际的软件项目开发运行过程之中,往往都会在Windows中进行项目的开发,而在项目部署的时候基于Linux或是Unix系统来进行项目的发布以保证生产环节的安全性;
在不同的系统之中存在着不同的路径分割符:Windows“\”、Linux分隔符“/”,所以最初进行开发的时候就不细考虑 不同系统下的分隔符问题,所以为了解决此问题,File类提供有一个常量:public static final String separator;
范例:正常的路径编写:
File file=new File("d:"+File.separator+"mldn.txt");
但是随着系统适应性的不断加强,对于当前的路径操作,也可以使用随意使用,
File file=new File("d:/mldn.txt");
2.在使用File类进行文件处理的时候需要注意的是:程序—>JVM—>操作系统函数—>文件处理。所以在进行同一文件的反复删除或者创建的时候有可能会出现有延迟的问题,所以最好的方案是别重名;
3.在进行文件创建的时候有一个重要的前提,文件的父路径必须首先存在。
如何获取父路径:public File getParentFile();
创建目录:public boolean mkdirs();
import java.io.File;
public class Test {
public static void main(String[] args) throws Exception{
File file=new File("d:"+File.separator+"hello"+File.separator+"demo"+File.separator+"message"+File.separator+"mldn.txt");
if(!file.getParentFile().exists()){//父路径不存在
file.getParentFile().mkdirs();//创建父路径
}
if(file.exists()){//如果文件存在
file.delete();//删除此文件
}else{//文件不存在
file.createNewFile();//创建新文件
}
}
}
除了 可以进行文件的操作之外还可以通过File类来获取一些文件本身提供的信息,
1.文件是否可读:public boolean canRead();
2.文件是否可写:public boolean canWrite();
3.获取文件啊长度:public long length(),该方法返回的是一个long数据类型(字节长度);
4.最后一次日期修改时间:public long lastModifiled();
5.判断是否是目录:public boolean isDirectory();
6.判断是否是文件:public boolean isFile();
package cn.mldn.test;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;class MathUtil{
private MathUtil(){}
public static double round(double num,int scale){
return Math.round(Math.pow(10, scale)*num)/Math.pow(10, scale);
}
}public class Test {
public static void main(String[] args) throws Exception{
File file=new File("d:"+File.separator+"logo.png");
System.out.println("文件是否可读:"+file.canRead());
System.out.println("文件是否可写:"+file.canWrite());
System.out.println("文件大小:"+MathUtil.round(file.length()/(double)1024/1024, 2));
System.out.println("最后的修改时间"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
System.out.println("是否目录吗?"+file.isDirectory());
System.out.println("是文件吗?"+file.isFile());
}
}
文件是否可读:true
文件是否可写:true
文件大小:0.01
最后的修改时间2020-01-31 16:46:21
是否目录吗?false
是文件吗?true
既然可以判断给定的路径是文件还是目录,那么就可以进一步的判断,如果发现是目录则应该列出目录中的全部内容
列出文件目录:public Fiel[] listFiles();
import java.io.File;
public class Test {
public static void main(String[] args) throws Exception{
File file=new File("d:"+File.separator);
if(file.isDirectory()){
File result[]=file.listFiles();//列出文件中的全部内容
for(int x=0;x<result.length;x++){
System.out.println(result[x]);
}
}
}
}
这些信息的获得都是文件或者目录本身的操作,都是不涉及到文件内容处理的。
File操作案例:列出指定目录中的全部文件
任意设置一个目录的路径,而后将这个目录中所有的文件的信息全部列出,包括子目录中的全部文件。这种情况下最好的做法就是利用递归来完成。
范例:程序实现
列出D盘全部。
package cn.mldn.test;
import java.io.File;
public class Test {
public static void main(String[] args) throws Exception{
File file=new File("D:"+File.separator);
listDir(file);
}
public static void listDir(File file){
if(file.isDirectory()){//是一个目录
File results[]=file.listFiles();//列出目录中的全部内容
if(results!=null){
for(int x=0;x<results.length;x++){
listDir(results[x]);//继续一次判断
}
}
}
System.out.println(file);//获得完整的路径
}
}