——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
黑马程序员–Java之IO(输入输出)(下)04
一、File类的简介
File类用于封装一个路径,这个路径可以是从系统盘符开始的绝对路径,如:D:\file\a.txt,也可以是相对于当前目录而言的相对路径,如src\Hello.java。File类内部封装的路径可以指向一个文件,也可以指向目录。File类是将文件和文件系统封装成对象的一个类,它的实例技能代表某一特定文件,也能指代某一目录下所有文件的集合。封装操作文件和文件夹的方法。
File f=new File(“myDemo.txt”);
//创建File对象,参数也可以是文件的绝对路径,如果没有提供路径名,则在当前目录创建
File dir=new File(“d:\mydemo”); // d盘下 mydemo 目录
分别声明了一个文件,和一个文件目录,指向File对象。
其中从File对象创建文件时需要调用File类createNewFile()方法,当指定文件名的文件不存在时,会创建一个此指定名的文件,如果已经存在,则不创建。而 mkdir() 可以创建此抽象路径名的指定目录。(mkdirs()可以创建多级目录)
File f=new File(“file.txt”);
String create=f.createNewFile(); //创建File对象封装的路径名为文件名的文件,返回boolean
File dir=new File(“”);
dir.mkdir(); // 创建文件夹”kk” 父目录abc必须存在,”abc//kk”如果abc不存在,则kk不可能创建成功
dir.mkdirs(): //创建多级目录”abc//fdsa//fdsafsad//fasfas//faf”
也可以在指定目录创建具有指定名字的文件
File f=new File(String path, String name);
由于File类既可以指代特定文件,又可以指代某一目录。所以也可以如下表示:
File f= new File(File dir,String name):
//我们可以通过isDirector()和isFile()方法来确定某一文件
//对象到底是文件还是文件路径。
当File类对象存在时,可以通过调用exists()方法检查文件或者文件夹(目录)是否存在。存在则返回true,否则返回false。
File f = new File(“no exist”);
String filePath=f.getAbsolutePaht(); //返回该文件的绝对路径
boolean=f.exists();
String path =f.getpath(); // 返回包含该文件路径名的字符串
“c:”+File.separator+”abc”+File.separator+”a.txt”
//系统分隔符的使用方法 相当于” c:\abc\a.txt”
delete()与deleteOnExit()的区别: deleteOnExit() 在对象创建完毕调用,在程序结束时删除,而delete()立刻删除文件,前面发生异常可能无法执行。
File f=new File(“file.txt”)
f.deleteOnExit()
f.canExcute() //判断一个File对象能否被执行,并返回
boolean dir.isAbsolute()
//是否是绝对路径(“d://fdasf//fasfsd//fsdafsda”)
String getAbsolutePath() //返回绝对路径的字符串表示
getPath() //返回相对路径
getParent() //如果没有明确的指明对象的父目录,该方法返回空,例如参数是相对路径,
renameTo(File f)//相当于剪切重命名的效果 f1.renameTO(f2) //结果是f1改名并剪切到f2存在的目录下
File[] files=File.listRoots()// 获取机器的盘符,返回File对象数组
二、查询目录列表
调用list()方法可以获得该文件目录下文件或者文件夹列表,并返回一个有文件名或者文件夹名组成的字符串数组。下列代码可以返回命令行 中输入的任意路径的文件列表
File dir=new File(args[0]); //ex: Java Demo D:\my java
String [] fileNames=dir.list(); // 该目录必须存在
class Demo{
public static vois main(String[],args){
File dir=new File("c:\\abc");
String[] arr=dir.list(new FilenameFilter();
public boolean accept(File dir,String name) {
//accept的返回值来判定是不是需要的文件,true为需要,
//System.out.println("dir:"+dir+" name"+name);
return( name.endsWith(".txt"));
}
}
}
File[] listFiles() //返回这个File对象包含的文件和目录所对应的File对象构成的数组。
File dir = new File("C:\\abc");
File[] files=dir.listFiles();
for(File f:files){
System.out.println(f.getName+"::"+f.length());
}//无法显示目录中子目录的文件
如何打开目录中子目录的文件?
class Demo{
public static void main(String[] args){
File dir=new File("d:\\abc");
showDir(dir);
}
public static void showDir(File dir){
File[] files=dir.listFile();
for(int i=0;x<files.length();x++){
if(files[i].isDirectory()){
showDir(file[x]);
}else{
System.out.println(files[i].getName());
/* System.out.files[i]会返回封装的路径,封装相对路径则返回相对路径,封装绝对路径则返回绝对路径。*/
}
}
}
}
如何删除一个带有内容的目录? 原理:从里往外删除
class RemoveDir{
public static void main(String[] args){
File dir=new File("d:\\abc");
removeDir(dir);
}
public static void removeDir(File dir){
File[] files=dir.listFiles();
for(int i=0;i<files.length;i++){
if(files[i].isDirectory()){
removeDir(file[i]);
}else{
files[i].delete();
//System.out.println(file[i].toString()+file[i].delete());
}
}
System.out.println(dir+" dir "+dir.delete());
}
}
将指定目录下满足某些要求的文件写入到一个新的文件中。
对指定目录递归,得到所有的Java文件路径,将这些路径存储到集合当中 ,将集合中的数据写入到一个文件之中 //所有的文件路径存放在一个.txt文件之中
class JavaFileList{
public static void main(String[] args){
File dir=new File("d:\\java123);
List<File> list=new ArrayList<File>();
fileToList(dir,list);
System.out.println(list.size());
File file=new File(dir,"java");
writeToFile(list,file.toString());
}
public static void fileTolist(File dir,List<File> list) throw IOException{
File[] files=dir.listFiles();
for(File file :files){
if(file.isDirectory()){
fileTolist(file,list);
}else{
if(file.getName().endWith(".java" )){
list.add(file);
}
}
}
}
public static void writeToFile(List<File> list String javaListFile) throw IOException{
BufferedWriter bufw=null;
try{
bufw=new BufferedWrite(new FileWriter(javaListFile));
for(File f:list){
String path=f.getAbsolutePath();
bufw.write(path);
bufw.newLine();
bufw.flush();
}catch (IOException e){
throw e;
}
finally{
try{
if(bufw!=null)
bufw.close();
}catch(IOException e){
throw e;
}
}
}
}