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);
}