Java io.File学习笔记
2017-05-19 本文已影响13人
smmtest
//File里一些常用的功能、注意文件与文件夹的区分
File file=new File("F:\\test");
System.out.println("文件大小"+file.length());
System.out.println("文件/文件夹上层路径"+file.getParent());
System.out.println("文件/文件夹名字"+file.getName());
System.out.println("文件/文件夹是否存在"+file.exists());
System.out.println("是不是文件并且存在?"+file.isFile());
System.out.println("是不是文件夹并且存在?"+file.isDirectory());
System.out.println("能不能删除?如果存在则删除"+file.delete());
//mkdirs的区别是如果父路径也不存在则带着父路径一起创建,创建的是文件夹,就算文件夹名有后缀,也是文件夹
System.out.println("是否能创建文件夹(如果存在就是false)"+file.mkdir());
File filemk=new File("F:\\test\\aaa\\bbb.txt");
filemk.mkdirs();
//createNewFile创建的是文件,并且父路径需要存在,要不然会报找不到路径的错误
File file2=new File("F:\\1.txt");
try {
System.out.println("是否能创建文件(如果存在就是false)"+file2.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
//输出该目录下所有文件和文件夹
File file3=new File("F:\\test");
File[] files=file3.listFiles();//还有其他两种带参数的方法
System.out.println(file3.getName()+"目录下有以下文件和文件夹:");
for (int i=0;i<files.length;i++){
System.out.println(files[i].getName()+"是否隐藏"+files[i].isHidden());
}
//通过文件过滤接口筛选文件,实现accept方法,匿名内部类
//.list()源码中有判断accept()的值,所以需要自己实现修改
//FileFilter也是具有筛选功能的接口,参数不同
String[] files2=file3.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".iml");
}
});
//files2中已经是所有.iml文件的数组了
System.out.println("后缀名为iml的文件如下:");
for (int i=0;i<files2.length;i++){
System.out.println(files2[i]);
}
小例子:
输出某个文件夹下面所有子孙文件
并且按一定的阶层排序
private static int level=0;//设定层级的等级,之后分层会用到
//参数传入File类型
public static void xxx(File file){
File[] files=file.listFiles();
//遍历实参
for (File subFile:files){
//判断该层级下的文件类型
//是否是隐藏文件
if (subFile.isHidden()){
System.out.print("");
}
//是否是文件
else if (subFile.isFile()){
StringBuffer stringBuffer=new StringBuffer();
//调用自定义方法
stringBuffer.append(appendTab());
stringBuffer.append(subFile.getName());
System.out.println(stringBuffer);
}
//是否是文件夹
else if (subFile.isDirectory()){
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append(appendTab());
//如果是文件夹,就让level+1,因为要到下个层级去了
level++;
stringBuffer.append(subFile.getName());
//文件夹后面加上\以区分
stringBuffer.append("\\");
System.out.println(stringBuffer);
//递归自身,当判断为文件夹时,就再次进入方法继续做判断输出
xxx(subFile);
//结束递归后,就等于返回到了之前的层
//级,需要将level减少,要不然同层级的文
//件会混乱
level--;
}
}
}
//控制子孙文件前输出多少个tab
public static String appendTab(){
StringBuffer stringBuffer=new StringBuffer();
for (int i=1;i<=level;i++){
stringBuffer.append("\t");
}
return stringBuffer.toString();
}
结果:
![5]~0G26}U0}P05_ZR]M1Z8D.png](https://img.haomeiwen.com/i4428722/ab1e3ab275cf3e91.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)