1.File类常见方法

1)File类目录创建操作

问题引出:
在写File类操作的时候,是不可以直接输入一个不存在的目录,然后加入要创建的文件
这样系统会认为此时的路径是不可以使用的,那么就会出现创建错误
那么,我们怎么判断是否存在父路径呢?

/*
找到父路径:public File getParentFile();
getParentFile配合.exists使用,返回false表示不存在此父路径
创建目录:public boolean mkdir();
创建多个目录:public boolean mkdirs(); 
*/
//例:
import java.io.File
//其他略
public static void main(String args[]) throws Exception {  //抛出
    File file = new File("e:" + File.separator + "demo" + File.separator + "wenjian.txt");
    if (!file.getParentFile().exists()) {  //现在父路径不存在
        file.getParentFile().mkdir();  //创建父路径
        //若是有多个父目录,则使用mkdirs()来创建父目录
    }
}

2)取得文件信息内容操作

//取得文件大小:public long length(); 按照字节返回
//例:
import java.io.File;
//其他略
public static void main(String args[]) throws Exception {  //抛出
    File file = new File("假设这是要一个文件的路径");  
    if (file.exists()) {
        System.out.println("文件大小:" + file.length()/1024/1024);
        //此时就算是这样,还是不符合一般人的习惯,(double)强制转换也不好看
    }
}
//文件大小格式整理
//BigDecimal是对字节进行格式整理
import java.math.BigDecimal;
//略
System.out.println("文件大小:" 
+ (new BigDecimal((double) file.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP)) 
+ "M");

3)常用杂项

判断是否是文件:public boolean isFile();
判断是否是目录:public boolean isDirectory();
最近一次修改的日期:public long lastModified();
文件名称:public String getName();
文件路径:public String getPath();

import java.io.File;
import java.util.Date;
import java.text.SimpleDateFormat;

//略
public static void main(String args[]) throws Exception {  //抛出
    File file = new File("设置文件路径");
    System.out.println(file.getPath());
    System.out.println(file.getName());
    if (file.exists()) {
        System.out.println("是否是文件:" + (file.isFile()));
        System.out.println("是否是目录:" + (file.isDirectory()));
        System.out.println("上次修改时间:" + file.lastModified());  //时间格式还没有整理
        //格式化之后的时间类
        System.out.println("时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").fotmat(new Date(file.lastModified( ))));
    }
}

2.File类目录操作

1)当前目录操作

列出目录下的信息:public String[] list();
列出所有的信息以File类对象包装:public File[] listFile();

//列出信息当前文件夹信息
import java.io.File
//略
public static void main(String args[]) throws Exception {  //抛出
    File file = new file("文件路径");
    if (file.isDirectory()) {
        String result1[] = file.list();
        for (int x=0; x < result.length; x++) {
            System.out.println(result[x]);
            //可以列出目录中的内容,但是只是列出目录下的子目录与文件名称
        }
        String result2[] = file.listFiles();
        for (int x=0; x < result.length; x++)  {
            System.out.println(result[x]);  //调用toString
            //返回较完整的信息,还有路径格式
        }
    }
}
//输出更好的用户体验
import java.io.File;
import java.util.Date;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;

public class Nice {
    public static void main(String args[]) throws Exception {
        File file = new File(File.separator + "home" + File.separator + "Nice" + File.separator + "音乐");  //路径
        if (file.isDirectory()) {  
            File result[] = file.listFiles();
            for (int x=0; x < result.length; x++) {
                System.out.println(result[x].getName() 
                    + "\t\t" 
                    + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(result[x].lastModified())) 
                    + "\t\t" 
                    + (result[x].isDirectory()?"目录":"文件") 
                    + "\t\t" + (result[x].isFile()?
                        (new BigDecimal((double)result[x].length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP)) + "M":"")
                    );
            }
        }
    }
}
//格式可能没有调整好,这里就不再细说了,大体上程序是没有问题的

2)当前目录下的所有子路径

使用递归,将该目录下的所有子路径都列出来

import java.io.File
//基本格式略,抛异常略
main...{
    File file = new File("文件路径");
    print(file);
}
public static void print(File file) {
    if (file.isDirectory()) {  
        File result[] = file.listFiles();  //列出子目录
        if (result != null) {  //表示已经可以列出的目录(因为windows下有些文件是不能访问的)
            for (int x=0; x < result.length; x++) {
                print(result[x]);  //继续列出
            }
        }
    }
    System.out.println(file);
}