您的位置:首页 > 职场人生

黑马程序员_基础_IO流学习笔记_File对象功能

2014-07-15 15:47 651 查看
-------android培训java培训、期待与您交流!----------

1、创建和删除

File类:文件和目录路径名的抽象表示形式;用来将文件或者文件夹封装成对象;方便对文件与文件夹的属性信息进行操作;可以作为参数传递给流的构造函数。

1、创建:

boolean createNewFile():在指定位置创建文件,如果文件已经存在,则不创建,返回false。

和输出流不一样,输出流对象一建立就创建文件,而且会覆盖已有文件。

boolean mkdir():创建文件夹

boolean mkdirs():创建多级文件夹

2、删除:

boolean delete():删除失败返回false。如果文件正在被使用,则删除不了方法false。

void deleteOnExit():在程序退出时删除指定文件。

public static void deleteFile(){

File f = new File("G:\\TestFolder\\file.txt");
//程序结束的时候将此文件删除,不管程序是否异常退出
f.deleteOnExit();
//删除失败返回false
P.rintln("delete File:" + f.delete());
}

//File对象的createNewFile():在指定位置创建文件,如果文件已经存在,则不创建 ,返回false。
//和输出流不一样,输出流对象一建立就会创建文件。而且文件已经存在,会覆盖。
public static void createNewFile() throws IOException{

File f = new File("G:\\TestFolder\\file.txt");
P.rintln("create File:" + f.createNewFile());
}
2、判断文件属性
boolean exists():文件是否存在。

ifFile():是否是文件。

isDirectory():是否是文件夹。

isHidden():文件是否隐藏。

下面是一个简单练习及相关要点说明:

public static void judgeFile() throws IOException{

File f = new File("G:\\TestFolder\\file.txt");
P.rintln("exist:" + f.exists());
if(!f.exists()){
f.createNewFile();
}
//判断文件是否可执行
P.rintln("execute:" + f.canExecute());

//mkdir只能创建一级目录,mkdirs能创建多级目录
File dir = new File("G:\\TestFolder\\folder1\\a\\b\\c\\d");
P.rintln("mkdirs:" + dir.mkdirs());

//在判断文件对象是否是文件或者目录时,必须要判断该文件对象封装的内容是否存在
//如果已经存在abc文件夹,则无法创建abc文件,文件夹与文件不能重名
f = new File("G:\\TestFolder\\abc");
f.createNewFile();
P.rintln("isFile:" + f.isFile());
P.rintln("isAbsolute:" + f.isAbsolute());
}
3、获取File对象属性

下面是获取File对象的常见方法和一些要点说明:

public static void renameFile(){

File f1 = new File("G:\\TestFolder\\Test.java");
File f2 = new File("G:\\TestFolder\\Test_Temp.java");
P.rintln("rename:" + f1.renameTo(f2));

f1 = new File("G:\\TestFolder\\Test2.java");
f2 = new File("D:\\Test.java");
P.rintln("rename:" + f1.renameTo(f2));	//会将文件移动到D盘并改名
}

public static void getFileInfo() throws IOException{

File f = new File("G:\\TestFolder\\Test.java");
Calendar cd = Calendar.getInstance();
cd.setTimeInMillis(f.lastModified());		//获取最后修改时间的毫秒值

P.rintln("文件名:" + f.getName());
P.rintln("文件路径:" + f.getPath());	//获取封装时的文件路径
P.rintln("父目录:" + f.getParent());	//File对象没有封装绝对路径,则返回null。如果相对路径中有上一层目录,则返回此目录
P.rintln("绝对路径名字符串:" + f.getAbsolutePath());	//使用相对路径创建的文件,可使用此方法获取绝对路径
P.rintln("绝对路径名形式:" + f.getAbsoluteFile());  //此方法返回的是File对象
P.rintln("最后修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cd.getTime()));	//格式化输出最后修改时间
P.rintln("文件大小:" + f.length());		//返回的是字节数
}
4、列出指定目录下指定文件

下面是测试代码及要点说明

//listFiles()列出指定目录下所有文件和文件夹,包含隐藏文件,返回的是File对象数组
public static void listFiles(){

File dir = new File("G:\\TestFolder");
File[] files = dir.listFiles();
for(File file : files){
P.rintln("文件名:" + file.getName() + " 文件大小:" + file.length());
}

P.rintln("----------------当前目录下的所有java文件--------------------");

files = dir.listFiles(new FilenameFilter(){		//使用过滤器只列出java文件
public boolean accept(File dir, String name){
return name.endsWith(".java");
}
});
for(File file : files){
P.rintln("文件名:" + file.getName() + " 文件大小:" + file.length());
}
}

//list()列出指定目录下所有文件和文件夹,包含隐藏文件,返回的是String数组
public static void list(){

File file = new File("G:\\TestFolder");
//调用list方法的File对象必须是封装了一个目录,该目录必须存在
String[] ss = file.list();
for(String name : ss){
P.rintln(name);
}

P.rintln("----------------当前目录下的所有java文件--------------------");

file = new File("G:\\TestFolder");
ss = file.list(new FilenameFilter(){	//使用过滤器只列出java文件
public boolean accept(File dir, String name){
//				if(name.endsWith(".java") || name.endsWith(".txt"))
//					return true;
//				return false;
return name.endsWith(".java");
}
});
for(String name : ss){
P.rintln(name);
}

}

public static void listRoots(){

File[] files = File.listRoots();
for(File file : files){		//列出电脑中所有盘符
P.rintln(file);
P.rintln(file.length());
}
}

5、列出目录下所有文件及文件夹包含子目录中的文件

下面是使用递推方法列出指定目录下所有文件及文件夹

public ArrayList<File> lists = new ArrayList<File>();

public static void main(String[] args) throws IOException {

callListAll();
}

//调用listFilesAll方法显示指定目录下所有文件及文件夹
public static void callListAll() throws FileNotFoundException{

PrintStream ps = new PrintStream("D:\\file.log");
System.setOut(ps);		//将file.log文件作为标准输出

IO_08_FileObject io = new IO_08_FileObject();
File f = new File("F:\\Program Files\\apache-jmeter-2.10");
String str = "\\" + "\\";
io.listFilesAll(f);		//将目录结构存放到list中
for(Iterator<File> i = io.lists.iterator(); i.hasNext();){
File file = i.next();
if(file.isDirectory()){
if(file.getAbsolutePath().equals("F:\\Program Files\\apache-jmeter-2.10")){
P.rintln(file.getAbsolutePath());
}
else{
String[] strs = (file.getAbsolutePath()).split(str);
P.rintln(fillLine(strs.length - 3) + file.getName());
}
}
else{
String[] strs = (file.getParent()).split(str);
P.rintln(fillLine(strs.length - 2) + file.getName());
}
//			P.rintln(file.getAbsolutePath() + "  ---  " + (file.isFile() ? "文件" : "文件夹"));
}
}

public static StringBuffer fillLine(int num){

if(num <= 0){
return new StringBuffer("");
}
if(num == 1){
return new StringBuffer("|--");
}
return fillLine(num - 1).insert(0, "|  ");
}

//列出指定目录下文件或者文件夹,包含子目录的内容。也就是列出指定目录下所有内容
//函数自身调用自身,这种表现形式,或者变成手法,称为递归
//递归要注意:1、限定条件 2、要注意递归次数,尽量避免内存溢出
public void listFilesAll(File dir){
lists.add(dir);
File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
listFilesAll(file);
}
else{
lists.add(file);
}
//			lists.add(file);		//这里最后才将文件夹add到list中,打印显示的时候不协调
}
}
file.log中显示效果



6、删除带内容的目录

public static void main(String[] args) throws IOException {

File file = new File("G:\\TestFolder\\folder");
long start = System.currentTimeMillis();
removeFolder(file);
long end = System.currentTimeMillis();
P.rintln("耗时:" + (end - start) + "毫秒");
}

//删除一个带内容的目录。删除原理:在window中,删除目录从里面往外删除
//既然从里往外删除,就需要用到递归
public static void removeFolder(File dir){

File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
removeFolder(file);		//若文件夹不为空,再次调用此方法先删除文件夹中的文件
}
else{
file.delete();		//直接删除文件
}
}
dir.delete();	//将文件夹中的文件删除之后再删除文件夹
}
7、创建Java文件列表
public static void main(String[] args) throws IOException {

List<File> list = new ArrayList<File>();
fileToList(new File("G:\\Workspaces"), list);
writeToFile(list, "D:\\java2.log");
}

public static void writeToFile(List<File> list, String fileName){

BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(fileName));
for(File file : list){
String path = file.getAbsolutePath();
bw.write(path);
bw.newLine();
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bw != null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

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")){	//如果是java文件就存储到list中
list.add(file);
}
}
}
}


-------
android培训、java培训、期待与您交流! ----------详细请查看:www.itheima.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: