流对象只能读,写文件或文件夹对象。 获取,更改文件属性需用到File类对象。FIle类中封装了对文件的新增, 修改,删除, 查询信息等方法。
1 FIle类基本方法
(1)创建
boolean createNewFile():如果该文件不存在,会创建,如果已存在,则不创建。不会像输出流一样会覆盖。
boolean mkdir();
boolean mkdirs();
(2)删除。
boolean delete();
void deleteOnExit();
(3)获取:
String getAbsolutePath();
String getPath();
String getParent(); //当file对象为文件, 返回的是文件所在目录。如果是文件夹,返回Null;
String getName();
long length();
long lastModified();
(4)判断:
boolean exists();
boolean isFile();
boolean isDirectory();
2 样例递归展示文件夹里的所有文件信息
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("G:\\easy_ui\\jquery-easyui-1.3.4\\");
FileWriter fWriter= new FileWriter("G:\\files.txt");
BufferedWriter bWriter = new BufferedWriter(fWriter);
listFile(file,0,bWriter);
bWriter.close();
}
private static void listFile(File file,int level,BufferedWriter bWriter) throws IOException{
bWriter.write(getSuffix(level)+file.getName()+"\r\n");
level++;
if(file.isDirectory()){//文件夹, 列出文件
File[] files = file.listFiles();
for(int i=0,len=files.length;i<len;i++){
listFile(files[i],level,bWriter);
}
}
}
private static String getSuffix(int level){
String resString ="";
for(int i=0;i<level;i++)
resString+="|--";
return resString;
}
}
运行结果(files.txt部分内容) :
|--api
|--|--accordion.html
|--|--api
|--|--|--Base
|--|--|--|--Documentation.html
|--|--|--|--draggable.html
|--|--|--|--droppable.html
|--|--|--|--easyloader.html
|--|--|--|--pagination.html
|--|--|--|--parser.html
|--|--|--|--progressbar.html
|--|--|--|--resizable.html
|--|--|--|--searchbox.html
|--|--|--|--tooltip.html
|--|--|--|--~$aggable.html
3 递归删除文件夹
java中没有内置递归删除的方法, 当文件夹里含文件,则无法删除该文件夹。 因此,必须先删除文件夹中的所有元素, 才能删除文件夹。
import java.io.File;
public class FileRemoveDir {
public static void main(String[] args) {
String dirString = "G:\\easy_ui\\jquery-easyui-1.3.4";
File dir = new File(dirString);
removeDir(dir);
System.out.println("删除成功,删除目录:"+dirString);
}
private static void removeDir(File dir){
if(dir.isDirectory()){
File[] files = dir.listFiles();
for(int i=0,len=files.length;i<len;i++){
removeDir(files[i]);
}
}
dir.delete();
}
}
运行结果:硬盘上已删除该文件夹,打印台输出内容,
删除成功,删除目录:G:\easy_ui\jquery-easyui-1.3.4
3 过滤文件
File对象可以通过listFiles(FilenameFilter filter) 获取文件夹下的元素,并通过过滤器进行过滤。
自定义的过滤器对象必须实现FilenameFilter接口,并实现Boolean
accept(File dir, String name)
方法。
案例 过滤删选文件夹G:\easy_ui\jquery-easyui-1.3.4 下.html的文件
import java.io.File;
import java.io.FilenameFilter;
public class FileFilterDemo {
public static void main(String[] args) {
File file = new File("G:\\easy_ui\\jquery-easyui-1.3.4");
String[] fileNames = file.list(new MyFilter(".html"));
for(String fileName : fileNames){
System.out.println(fileName);
}
}
}
class MyFilter implements FilenameFilter{
private String suffix;
public MyFilter(String suffix){
this.suffix=suffix;
}
public boolean accept(File dir, String name) {
if(name.endsWith(suffix))
return true;
return false;
}
}
运行结果:
index-api.html
index-demo.html