黑马程序员--IO流之File类
--------- android培训、java培训、期待与您交流! ---------
9 File类介绍
9.1 File类概述
●用来将文件或者文件夹封装成对象
●方便对文件与文件夹的属性信息进行操作
●File对象可以作为参数传递给流的构造函数
●了解File类中的常用方法如下所示:
1.创建文件或文件夹
boolcreateNewFile 在指定位置创建文件,如果文件已经存在,则不创建,并返回false。
和输出流不一样,输出流对象一定会创建文件。而且文件若已经存在,他会覆盖原来的文件。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2.删除
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回false。
void deleteOnExit();在程序退出时删除指定文件。
3.判断
boolean exists() 判断文件是否存在
boolean isDriectory()判断是否是目录
boolean isFile()判断是否是文件
boolean isHidden();判断是否被隐藏
boolean isAbsolute();判断此抽象路径名是否为绝对路径名
注意 :在判断是否是文件还是是否是目录时一定先判对该对象是否存在,通过 exists() 判断
4、获取信息
String getName():回由此抽象路径名表示的文件或目录的名称。
String getPath():将此抽象路径名转换为一个路径名字符串
String getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
如果相对路径中有上一级目录,也返回上一级目录
File getAbsoluteFile():返回此抽象路径名的绝对路径名形式。--返回的路径被封装成了对象
String getAbsolutePath():返回此抽象路径名的绝对路径名字符串。
long lastModified():返回此抽象路径名表示的文件最后一次被修改的时间。
long length():返回由此抽象路径名表示的文件的长度。
特殊方法:
boolean renameTo(File dest):重新命名此抽象路径名表示的文件。
9.2 File方法概述
1,listRoot方法 listRoot获取系统的根路径,也就是磁盘的盘符
public static void listRootDemo() { File []files = File.listRoots(); for(Filefile : files) { System.out.println(file); }
2, public String[] list()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
调用list方法的file对象必须是封装了一个目录,并且该目录必须存在。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void listDemo() { File f =new File("c:\\"); String []names = f.list(); for(Stringname : names) { System.out.println(name); } }
3, public String[] list(FilenameFilter filter)
返回当前 File
对象指定的目录中满足指定过滤器的文件列表。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.io.File; import java.io.FilenameFilter; public class FileDemo4 { public staticvoid main(String[] args) { // TODOAuto-generated method stub File f =new File ("c:\\"); String[]names = f.list(new FilenameFilter() { @Override publicboolean accept(File dir, String name) { //File dir 指的是的File 的目录,name是文件的名字 returnname.endsWith(".txt"); } }); for(Stringname : names) { System.out.println(name); } } }
9.3 练习
1,要求: 列出指定目录下文件或者文件夹,包含子目录中的内容。
也就是列出指定目录下所有内容。
分析:因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种表现形式,或者编程手法,称为递归。
递归要注意:
1)限定条件。
2)注意递归的次数。尽量避免内存溢出。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.io.*; class FileDemo3 { public static void main(String[] args) { File dir = new File("d:\\testdir"); //showDir(dir,0); //toBin(6); //int n = getSum(8000); //System.out.println("n="+n); System.out.println(dir.delete()); } public static String getLevel(int level) { StringBuilder sb = new StringBuilder(); sb.append("|--"); for(int x=0; x<level; x++) { //sb.append("|--"); sb.insert(0,"| "); } return sb.toString(); } public static void showDir(File dir,int level) { System.out.println(getLevel(level)+dir.getName()); level++; File[] files = dir.listFiles(); for(int x=0; x<files.length; x++) { if(files[x].isDirectory()) showDir(files[x],level); else System.out.println(getLevel(level)+files[x]); } }
2,将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。建立一个java文件列表文件。
思路:
- 对指定的目录进行递归。
- 获取递归过程所以的java文件的路径。
- 将这些路径存储到集合中。
- 将集合中的数据写入到一个文件中。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.io.*; import java.util.*; class JavaFileList { public static void main(String[] args) throws IOException { File dir = new File("d:\\java1223"); List<File> list = new ArrayList<File>(); fileToList(dir,list); //System.out.println(list.size()); File file = new File(dir,"javalist.txt"); writeToFile(list,file.toString()); } public static void fileToList(File dir,List<File> list) { File[] files = dir.listFiles(); for(File file : files) { if(file.isDirectory()) fileToList(file,list); else { if(file.getName().endsWith(".java")) list.add(file); } } } public static void writeToFile(List<File> list,String javaListFile)throws IOException { BufferedWriter bufw = null; try { bufw = new BufferedWriter(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; } } } }
--------- android培训、java培训、期待与您交流! ----------