[学习笔记]Java IO之文件
2016-04-16 13:45
435 查看
1.概述
文件和目录路径名的抽象表现形式。2.特点
可以将文件或文件目录封装成对象进行操作。File类实例是常量,类似于String类。
3.构造器
通过parent目录对象下child子目录或者文件创建对象。File(Fileparent,Stringchild)
通过路径字符串创建对象。
File(Stringpathname)
通过parent目录下child子目录或文件创建对象。
File(Stringparent,Stringchild)
4.常用方法
判断是否存在booleanexists()
判断是否为绝对路径,目录,文件,隐藏
booleanisAbsolute()
booleanisDirectory()
booleanisFile()
booleanisHidden()
创建文件目录
booleanmkdir()
booleanmkdirs()
创建文件
booleancreateNewFile()
staticFilecreateTempFile(Stringprefix,Stringsuffix)
staticFilecreateTempFile(Stringprefix,Stringsuffix,Filedirectory)
删除
booleandelete()
罗列文件
String[]list()
String[]list(FilenameFilterfilter)
File[]listFiles()
File[]listFiles(FileFilterfilter)
File[]listFiles(FilenameFilterfilter)
获取文件属性
longlastModified()
longlength()
获得文件路径
FilegetAbsoluteFile()
StringgetAbsolutePath()
StringgetName()
StringgetParent()
FilegetParentFile()
StringgetPath()
判断文件权限
booleancanExecute()
booleancanRead()
booleancanWrite()
设置文件权限
booleansetExecutable(booleanexecutable)
booleansetExecutable(booleanexecutable,booleanownerOnly)
booleansetReadable(booleanreadable)
booleansetReadable(booleanreadable,booleanownerOnly)
booleansetReadOnly()
booleansetWritable(booleanwritable)
booleansetWritable(booleanwritable,booleanownerOnly)
设置文件最后修改时间
booleansetLastModified(longtime)
5.示例
packageio;
importjava.io.File;
importjava.io.IOException;
publicclassFileDemo{
publicstaticvoidmain(String[]args){
Stringpath="E:"+File.separator+"java";
Filef1=newFile(path);//E:\java
Filef2=newFile(path,"itheima.java");//E:\java\itheima.java
//创建文件,如果文件不存在,创建返回true;如果文件存在,则不创建返回false;如果路径不存在或者错误,IOException。
Filefile=newFile("File.java");
try{
booleancreateNewFile=file.createNewFile();//createNewFile=true
}catch(IOExceptione){
e.printStackTrace();
}
//创建目录,如果目录不存在,创建返回true;如果目录存在,则不创建返回false
Filedir=newFile("files"+File.separator+"java");
booleanmkdir=dir.mkdir();//只能创建单级目录,mkdir=false
booleanmkdirs=dir.mkdirs();//创建层级目录,mkdirs=false
//判断存在,文件,目录
booleanisExists=file.exists();//isExists=true
//确保文件存在再判断是否为文件/目录
booleanisDirectory=file.isDirectory();//isDirectory=false
booleanisFile=file.isFile();//isFile=true
booleanisHiden=file.isHidden();//isHiden=false
//获取绝对路径
FileabsFile=file.getAbsoluteFile();
//E:\Documents\个人文档\MyPrograms\Java_itheima\File.java
StringabsPath=file.getAbsolutePath();
//E:\Documents\个人文档\MyPrograms\Java_itheima\File.java
//获取File中封装的路径,文件名,长度,修改时间
path=file.getPath();//File.java
Stringfilename=file.getName();//File.java
longsize=file.length();//0
longtime=file.lastModified();//1418843575174
//删除目录和文件
if(file.exists()){
booleandelete=file.delete();//true
}
//获取目录下的文件以及文件夹的名称
String[]names=dir.list();
for(Stringname:names){
System.out.println(name);
}
//获取目录下的文件以及文件夹对象。
File[]files=dir.listFiles();
for(Filef:files){
System.out.println(f.length());
}
//只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除。
if(dir.exists()){
booleandelete=file.delete();//false
}
}
}
文件过滤器(FileFilter接口和FilenameFilter接口)
1.概述
FileFilter接口和FilenameFilter接口类似Comparator比较器,可以为文件过滤提供帮助。2.特点
文件过滤器可以为文件罗列方法提供参数,让其支持条件过滤。FileFilter接口能够提供文件过滤条件,而FilenameFilter接口能够提供文件名过滤条件。
可以使用匿名内部类方式为文件罗列提供参数。
3.方法
FileFilter接口:booleanaccept(Filepathname)
FilenameFilter接口:
booleanaccept(Filedir,Stringname)
4.示例
FileFilterBySuffix.javapackageio.filter;
importjava.io.File;
importjava.io.FileFilter;
publicclassFileFilterBySuffiximplementsFileFilter{
privateStringsuffix;
publicFileFilterBySuffix(Stringsuffix){
super();
this.suffix="."+suffix;
}
publicbooleanaccept(Filedir){
returndir.getName().endsWith(suffix);
}
}
FileList.java
packageio;
importio.filter.FileFilterBySuffix;
importjava.io.File;
importjava.io.FileFilter;
publicclassFileList{
publicstaticvoidmain(String[]args){
//获取文件和文件夹
Filedir=newFile("E:\\Documents");
//健壮性判断:必须存在,必须目录,否则容易引发返回数组为null,出现NullPointerException
if(!(dir.exists()&&dir.isDirectory())){
return;
}
//使用文件名过滤器来进行遍历
File[]files=dir.listFiles(newFileFilterBySuffix("pdf"));
for(Filefile:files){
System.out.println(file.getName());
}
//使用文件过滤器来进行遍历
File[]dirs=dir.listFiles(newFileFilter(){
@Override
publicbooleanaccept(Filepathname){
returnpathname.isDirectory();
}
});
for(Filesdir:dirs){
System.out.println(sdir.getName());
}
}
}
案例
层级遍历目录
packageio;
importio.filter.FileFilterBySuffix;
importjava.io.File;
importjava.io.IOException;
importcollection.structure.Queue;
publicclassFileIterator{
publicstaticvoidmain(String[]args){
Filedir=newFile("E:\\Documents\\个人文档\\MyPrograms\\Java_itheima");
//列出指定目录下以及子目录下所有文件
listAllFiles(dir);
//列出指定目录下以及子目录下所有指定文件
listAllJavaFiles(dir,newFileFilterBySuffix("java"));
//使用队列或堆栈,列出指定目录下以及子目录下所有文件
listAllFilesByStack(dir);
FiledeepPath=newFile(dir,"!a\\b\\c");
deepPath.mkdirs();
FiledeepFile=newFile(deepPath,"1.java");
try{
deepFile.createNewFile();
}catch(IOExceptione){
e.printStackTrace();
}
//删除指定目录(包括子目录和文件)
Filepath=newFile(dir,"!a");
deletePath(path);
}
/**
*列出指定目录下以及子目录下所有文件
*使用队列
*特点是广度优先搜索
*@paramdir
*/
publicstaticvoidlistAllFilesByStack(Filedir){
Queue<File>queue=newQueue<File>();
queue.enQueue(dir);
while(!queue.isEmpty()){
File[]files=queue.deQueue().listFiles();
for(Filefile:files){
if(file.isDirectory()){
queue.enQueue(file);
}else{
System.out.println(file);
}
}
}
}
/**
*删除指定目录(包括子目录和文件)
*使用递归
*@parampath
*/
publicstaticvoiddeletePath(Filepath){
File[]files=path.listFiles();
for(Filefile:files){
if(file.isDirectory()){
deletePath(file);
}else{
System.out.println(file.delete());
}
}
System.out.println(path.delete());
}
/**
*列出指定目录下以及子目录下所有指定扩展名文件
*使用递归和文件过滤器
*@paramdir
*@paramff
*/
publicstaticvoidlistAllJavaFiles(Filedir,FileFilterBySuffixff){
File[]files=dir.listFiles();
for(Filefile:files){
if(file.isDirectory()){
listAllJavaFiles(file,ff);
}elseif(ff.accept(file)){
System.out.println(file);
}else{
continue;
}
}
}
/**
*列出指定目录下以及子目录下所有文件
*使用递归
*@paramdir
*/
publicstaticvoidlistAllFiles(Filedir){
File[]files=dir.listFiles();
for(Filefile:files){
if(file.isDirectory()){
listAllFiles(file);
}else{
System.out.println(file);
}
}
}
}
相关文章推荐
- [学习笔记]Java IO之字节流
- [学习笔记]Java日期类及其处理
- [学习笔记]Java常用工具类
- Eclipse_Java编码规范详细设置
- java入门
- [学习笔记]Java集合框架之Map集合
- SpringMVC表单标签简介
- [学习笔记]Java集合框架之Set集合
- [学习笔记]Java基本数据类型包装类
- [学习笔记]Java多线程经典问题
- [学习笔记]Java多线程
- [学习笔记]Java异常机制
- [学习笔记]Java模板方法和单例设计模式
- [学习笔记]Java抽象类和接口
- [学习笔记]Java数组和方法
- 更多的表单验证
- [学习笔记]Java排序算法之归并排序
- Java中常见的IO流及其使用
- [学习笔记]EXCEL导入功能java代码实现
- [学习笔记]使用java读取Excel表格中的数据