流对象不能去操作文件夹,不能去操作属性信息. 流只能操作数据.文件类的出现正好弥补了流的不足之处.File类是专门操作文件用的
File类
✔用来将文件或者文件夹封装成对象
✔方便对文件与文件夹的属性信息进行操作
✔File对象可以作为参数传递给流的构造函数
File类常见的方法:
1,创建.
在指定位置创建文件,如果该文件已经存在,则不创建,返回false和输出流不一样,输出流一建立就创建文件,而且文件如果已经存在,也会覆盖的.
创建临时文件,一些软件中很常见.软件运行完后,自动删除.
创建文件夹
Mkdir()创建一级目录.mkdirs()创建多级目录
2,删除
deleteOnExit()在程序退出时删除指定文件…….
递归删除,文件文件夹…..java删除不走回车站
import java.io.*;
class deleteDemo{
public static void main(String[] args){
File f=new File("D:\\Testdelete");
remove(f);
}
public static void remove(File f){//递归循环掉调用自己删除
File[] fi=f.listFiles();
for(int i=0;i<fi.length;i++){
//一般情况建议先判断下是否为隐藏.,有些隐藏文件,java无法访问
if(fi[i].isDirectory())
remove(fi[i]);
else //else一定要加上,如果不是目录才走else.....
System.out.println(fi[i]+":删:除:"+fi[i].delete());
}
System.out.println(f+"----"+f.delete());
}
}
3,判断
exists()判断文件或目录是否存在
判断是否为文件或文件夹.
isHidden()判断是否为隐藏文件
判断是为绝对路径(有详细的盘符)
4,获取:
getPath(),返回的是你封装的路径.
getAbsoluteFile()只返回绝对路径不看封装路径.[开发中一般用返回为File的,功能比较多]
getPath()与getAbsoluteFile()的区别:
返回绝对路径中的父目录(上一次目录),如果获取相对路径(没有具体的盘符),返回null.
List方法(一般返回File[]比较常用,因为返回File后功能多)
过滤文件
List(FilenameFilter filter)实例:(匿名对象,复写接口中的accept方法……………………………………..)
其中,涉及到了String的一个判断末尾是否包含指定字符串的方法endsWith();
用listFiles()方法[递归],打印出包含子类的文件目录,实例:
递归要注意:
1,限定条件
2,要注意递归的次数,尽量避免内存溢出
升级版,每层加上相应的空格数,显得更有层次感;
listRootS()实例:
其他:
练习:
import java.io.*;
import java.util.*;
//需求:将一个制定目录下的MP3文件的绝对路径,存储到一个文本文件中.
//建立一个MP3文件列表文件
class listDemo{
public static void main(String[] args)throws Exception{
File dir=new File("D:/Users/Jack/Music/KuGou");//指引出索引目录
List<File> list=new ArrayList<File>();//加你list集合做临时存储
dirToList(list,dir);
System.out.println(list.size());//打印list集合中的大小
File file=new File(dir,"list.txt");//指引目标文件
listToFile(list,file);
}
public static void dirToList(List<File> list,File dir){//抽出指引目录下的所有MP3文件
//建立临时File数组临时存储,dir下的所有目录和文件
File[] fi=dir.listFiles();
//遍历该数组,做出抽选.只要结尾为MP3的文件
for(File f:fi){
if(f.isDirectory())
dirToList(list,f);//判断是目录的话,再此调用该方法
else
if(f.getName().endsWith(".mp3"))
list.add(f);
}
}
//将list下的临时存储MP3文件写入文件
public static void listToFile(List<File> list,File f)throws Exception{
BufferedWriter bufw=null;
try{
bufw=new BufferedWriter(new FileWriter(f));
//遍历数组中的File文件,只打印绝对路径
for(File ff:list){ bufw.write(ff.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
}
catch(Exception e){
throw e;
}
finally{
try{
if(bufw!=null)
bufw.close();
}
catch(Exception ee){
throw ee;
}
}
}
}