您的位置:首页 > 编程语言 > Java开发

[学习笔记]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.java

packageio.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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: