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

黑马程序员——Java基础——IO流的File类

2015-09-13 11:21 567 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

File类:是用来操作文件和文件夹的类(流只能操作数据,不能操作文件)

一、获取信息

获取文件名称:getName()

获取相对路径:getPath( )

获取绝对路径:getAbsolutePath( )

获取绝对路径中的父目录:getParent( )

获取最后一次修改的时间:lastModefied( )

获取文件的长度:length( )

import java.io.*;
import java.text.*;
import java.util.*;

public class FileDemo
{
public static void main(String[] args)
{
File f1=new File("f:\\aa.txt");

String name=f1.getName();
String path=f1.getPath();
String absolutePath=f1.getAbsolutePath();
String parent=f1.getParent();
long time=f1.lastModified();
long length=f1.length();

//转换时间格式
Date d=new Date(time);
DateFormat df=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
String conTime=df.format(d);

System.out.println("name:"+name);
System.out.println("path:"+path);
System.out.println("absolutePath:"+absolutePath);
System.out.println("parent:"+parent);
System.out.println("time:"+time);
System.out.println("转换后的时间为"+conTime);
System.out.println("length:"+length);
}
}


File类的其他主要方法:

File listRoots( ) :列出可用的系统根,如 C,D , F 盘 等

String list( ):返回一个字符串数组,表示目录中的文件和目录

String list( FilenameFilter ): 这里传入了一个过滤器,可以指定要获取的文件类型

File listFiles( ) :返回文件数组,表示目录中的文件

boolean createNewFile( ):创建一个空文件

boolean mkdir( ) :创建一个新目录

boolean mkdirs( ):创建一个多层新目录

boolean delete( ) : 删除文件或目录

boolean renameTo(File) : 重命名文件

import java.io.*;

public class FileTest2
{
public static void main(String[] args) throws Exception
{
//test1();
//test2();
//test3();
//test4();
test5();
}

public static void test1()
{
File[] root=File.listRoots();   //列出可用系统根,该方法为静态方法
for(File r:root)
{
System.out.println(r);
}
}

public static void test2()
{
File f2=new File("f:\\abc");
String[] fileName=f2.list();    //列出指定目录的文件和目录
for(String s:fileName)
{
System.out.println(s);
}

String[] javaFileName=f2.list(new FileByJava());//列出目录中的符合过滤器要求的文件和目录
for(String s:javaFileName)
{
System.out.println(s);
}
}

public static void test3()
{
File f3=new File("f:\\abc");
File[] file=f3.listFiles();
for(File f:file)
{
System.out.println(f.length());     //可以操作文件,打印各文件的长度
}
}

public static void test4() throws IOException
{
File file1=new File("f:\\cc.txt");
file1.createNewFile();      //创建 cc.txt 文件
file1.delete();     //删除指定文件

File file2=new File("f:\\dd");
file2.mkdir();      //创建 dd文件夹,只能创建不存在的一层的

File file3=new File("f:\\ee\\ff\\gg");
file3.mkdirs();     // mkdirs()方法,可以创建不存在的多层文件夹

}

public static void test5() throws IOException
{
File f5=new File("f:\\111.txt");
//f5.createNewFile();

File renameFile=new File("g:\\222.txt");//把文件重命名,如果是剪切文件也可以用这方法
f5.renameTo(renameFile);
}

}

class FileByJava implements FilenameFilter  //定义一个过滤器,通过实现FilenameFilter接口
{
public boolean accept(File dir,String name) //覆盖接口中的accept()方法
{
return name.endsWith("java");       //如果文件符合该要求,返回true
}
}


列出指定目录下的所有内容:

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可,在列出过程中出现的还是目录的话,还可以再次调用本功能,也就是函数自身调用自身,这种表现形式,或者编程手法,称为递归。

递归要注意:

1、限定条件;

2、要注意递归的次数,尽量避免内存溢出。

import java.io.*;

public class ListAllFile
{
public static void main(String[] args)
{
File file=new File("f:\\aa");
listAll(file);
}

public static void listAll(File file)
{
File[] files=file.listFiles();
for(File f:files)
{
if(f.isDirectory()) //判断遍历到的文件是否文件夹,是的话就调用自身(即递归)
{
listAll(f);
}

System.out.println(f);
}
}
}


删除一个带内容的目录,删除原理:

在window中,删除目录从里面往外删除的,既然是从里往外删除,就需要用到递归。

import java.io.*;

public class DeleteFile
{
public static void main(String[] args)
{
File file=new File("f:\\aa");
deleteAll(file);
System.out.println("删除成功");
}

public static void deleteAll(File file)
{
File[] files=file.listFiles();
for(File f:files)
{
if(f.isDirectory())
{
deleteAll(f);   //判断是否目录,递归
}
f.delete();
}
file.delete();      //这个不能遗漏,最后要把最外面的文件夹也删除
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java