zoukankan      html  css  js  c++  java
  • 第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:OhMyGodTest.
    H:OhMyGodTest
    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();
        }
    }
  • 相关阅读:
    Python深入05 装饰器
    Python深入04 闭包
    Python深入03 对象的属性
    Ubuntu (虚拟机同样) 更换内核?
    .out
    GCC 编译详解
    linux 编译内核 /boot空间不足?
    Java Swing提供的文件选择对话框
    Java Swing 实时刷新JTextArea,以显示不断append的内容?
    为什么要编译Linux内核?
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4247450.html
Copyright © 2011-2022 走看看