第15章-输入/输出 --- File类


(一) Java的IO通过java.io包下的类和接口来支持,在java.io包下主要包括输入、输出两种IO流。

   每种输入、输出流又分为字节流和字符流两大类:

    (1)字节流以字节为单位来处理输入、输出操作

    (2)字符流则以字符来处理输入、输出操作

    除此之外,Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物理存储节点之间关联---不同的物理节点获取节点流的方式可能存在一定的差异,但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入、输出代码来读取不同的物理存储节点的资源。

 

(二)File类

  File类是java.io包下代表与平台无关的文件和目录,如果系统程序操作文件和目录都可以通过File类来完成。但是File不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。

 

(三)访问文件和目录

  File类提供了很多方法来操作文件和目录:

  1.访问文件名相关的方法:

    a. String getName():返回此File对象所表示的文件名或路径名

    b. String getPath():返回此File对象所对应的路径名

    c. File getAbsoluteFile(): 返回此File对象所对应的绝对路径所对应的File对象

    d. String getParent():返回此File对象所对应目录的父目录名

    e. boolean rename(File newName):重命名此File对象所对应的文件或目录,如果重命名成功,则返回true,否则返回false

  2. 文件检测相关的方法

    a. boolean exists():判断File对象所对应的文件或目录是否存在

    b. boolean canWrite():判断File对象所对应的文件盒目录是否可写

    c. boolean canRead():判断File对象所对应的文件盒目录是否可读

    d. boolean isFile():判断File对象所对应的是否是文件,而不是目录

    e. boolean isDirectory():判断File对象所对应的是否是目录,而不是文件

    f. boolean isAbsolete():判断File对象所对应的文件或目录是否是绝对路径。

  3. 获取常规文件信息

    a. long lastModified():返回文件的最后修改时间

    b. long length():返回文件内容的长度

  4. 文件操作相关的方法

    a. boolean createNewFile(): 当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,如果创建成功则返回true;否则返回false.

    b. boolean delete():删除File对象所对应的文件或路径

  5. 目录操作相关的方法

    a. boolean mkdir():试图创建一个File对象所对应的目录,如果创建成功,则返回true;否则返回false。调用该方法时File对象必须对应一个路径,而不是一个文件。 

    b. String[] list():列出File对象的所有子文件名和路径名,返回String数组。

    c. File[] listFiles():列出File对象的所有子文件和路径,返回File数组。

    d. static File[] listRoots(): 列出系统所有的根路径。

 

下面举例说明下:

 

复制代码
import java.io.File;
import java.io.IOException;

public class FileTest
{
    public static void main(String[] args) throws IOException
    {
        //以当前路径来创建一个File对象
        File file = new File(".");
        
        //直接获取文件名,输出一点
        System.out.println(file.getName());
        
        //获取相对路径的父路径可能出错,下面代码输出null
        System.out.println(file.getParent());
        
        //获取绝对路径
        System.out.println(file.getAbsoluteFile());
        
        //获取上一级路径
        System.out.println(file.getAbsoluteFile().getParent());
        
        //在当前路径下创建一个临时文件
        File tmpFile = File.createTempFile("aaa", ".txt",file);
        
        //指定当JVM退出时删除该文件
        tmpFile.deleteOnExit();
        
        //以系统当前时间作为新文件名来创建新文件
        File newFile = new File(System.currentTimeMillis() + "");
        System.out.println("newFile对象是否存在 : " + newFile.exists());
        
        //以指定newFile对象来创建一个文件
        newFile.createNewFile();
        
        //使用list()方法列出当前路径下的所有文件和路径
        String[] fileList = file.list();
        System.out.println("=====当前路径下所有文件和路径如下=====");
        for(String fileName : fileList)
        {
            System.out.println(fileName);
        }
        
        //listRoots()静态方法列出所有的磁盘根路径
        File[] roots = file.listRoots();
        System.out.println("=======系统所有根路径如下=======");
        for(File root : roots)
        {
            System.out.println(root);
        }
    }
}
复制代码

 

 运行结果:

 

复制代码
.
null
H:\OhMyGod\Test\.
H:\OhMyGod\Test
newFile对象是否存在 : false
=====当前路径下所有文件和路径如下=====
.classpath
.project
.settings
1390727504600
aaa1644796813208724263.txt
aaa6169179965396772881.txt
bin
out.txt
props.txt
src
text.txt
=======系统所有根路径如下=======
C:\
D:\
E:\
G:\
H:\
I:\
J:\
K:\
L:\
M:\
复制代码

 

 

 (四)文件过滤器

  在File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出符合条件的文件。

  FilenameFilter接口里包含了一个accept(File dir,String name)方法,该方法将依次对指定File的所有子目录或者文件进行迭代,如果该方法返回true,则list()方法会列出该子目录或者文件。

 

   举例:

  

复制代码
import java.io.File;
import java.io.FilenameFilter;

public class FilenameFilterTest
{
    public static void main(String[] args)
    {
        File file = new File(".");
        String[] nameList = file.list(new MyFilenameFilter());
        
        for(String name : nameList)
        {
            System.out.println(name);
        }
    }
}

//实现自己的FilenameFilter实现类
class MyFilenameFilter implements FilenameFilter
{ 
    @Override
    public boolean accept(File dir, String name)
    {
        return name.endsWith(".java") || new File(name).isDirectory();
    }
}
posted @ 2014-04-11 07:28  JAVA之迷  阅读(90)  评论(0编辑  收藏  举报