File java IO

Posted hello4world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了File java IO相关的知识,希望对你有一定的参考价值。

1.File简介

/**
 * java.io.File 
 * File用于表示文件系统中的一个文件或目录的
 * 
 * 使用File我们可以:
 * 1:访问其表示的文件或目录的属性(名字,大小等)
 * 2:创建,删除文件或目录
 * 3:访问一个目录中的子项
 * 
 * 但是不能访问文件数据.
 */
public class FileDemo {
    public static void main(String[] args) {
        /*
         * 创建File是要指定路径
         * 路径有两种:绝对路径和相对路径
         * 绝对路径通常不适用,虽然清晰明了,
         * 但是无法做到跨平台.
         * 
         * 相对路径不能直观体现出实际位置,但是
         * 灵活并适应各种不同运行环境.
         * 在eclipse中执行代码时,"./"当前目录
         * 指的就是当前项目目录
         */
        File file = new File("./demo.txt");        
        //获取文件名
        String name = file.getName();
        System.out.println(name);
        //获取长度(单位是字节)
        long len = file.length();
        System.out.println(len+"字节");
        //获取绝对路径
        String path = file.getAbsolutePath();
        System.out.println(path);
        /*
         * 是否可读,可写,是否为隐藏文件
         */
        boolean cr = file.canRead();
        boolean cw = file.canWrite();
        boolean ih = file.isHidden();
        System.out.println("可读:"+cr);
        System.out.println("可写:"+cw);
        System.out.println("隐藏文件:"+ih);        
    }
}

2.创建文件

/**
 * 使用File创建一个文件
 */
public class CreateNewFileDemo {
    public static void main(String[] args) throws IOException {
        /*
         * 在当前项目目录下新建一个文件test.txt
         */
        File file = new File("./test.txt");
        /*
         * boolean exists()
         * 判断当前File表示的文件或目录是否
         * 已经存在,存在则返回true
         */
        if(!file.exists()) {
            //创建该文件
            file.createNewFile();
            System.out.println("文件已创建!");
        }else {
            System.out.println("文件已存在!");
        }
        
    }
}

3.删除文件

/**
 * 删除一个文件
 */
public class DeleteFileDemo {
    public static void main(String[] args) {
        /*
         * 将当前目录下的test.txt文件删除
         */
        File file = new File("./test.txt");
        if(file.exists()) {
            file.delete();
            System.out.println("文件已删除!");
        }else {
            System.out.println("文件不存在!");
        }
    }
}

4.创建一个目录

/**
 * 创建一个目录
 */
public class MkdirDemo {
    public static void main(String[] args) {
        /*
         * 在当前目录下新建一个名为demo的目录
         */
        File dir = new File("./demo");
        if(!dir.exists()) {
            dir.mkdir();
            System.out.println("目录已创建!");
        }else {
            System.out.println("目录已存在!");
        }
    }
}

5.创建一个多级目录

/**
 * 创建一个多级目录
 */
public class MkdirsDemo {
    public static void main(String[] args) {
        /*
         * 在当前目录下新建目录:a/b/c/d/e/f
         */
        File dir = new File("./a/b/c/d/e/f");
        if(!dir.exists()) {
            //将不存在的父目录一同创建出来
            dir.mkdirs();
            System.out.println("目录已创建!");
        }else {
            System.out.println("目录已存在!");
        }
    }
}

6.删除目录

/**
 * 删除目录
 */
public class DeleteDirDemo {
    public static void main(String[] args) {
        //删除当前目录中的demo目录
        File dir = new File("./demo");
        if(dir.exists()) {
            /*
             * 删除目录有一个前提条件.就是该
             * 目录是一个空目录.
             */
            dir.delete();
            System.out.println("目录已删除!");
        }else {
            System.out.println("目录不存在!");
        }
    }
}

7.访问一个目录中的所有子项

/**
 * 访问一个目录中的所有子项
 */
public class ListFilesDemo {
    public static void main(String[] args) {
        //获取当前目录中的所有子项
        File dir = new File(".");
        /*
         * boolean isFile()
         * 判断当前File表示的是否为文件
         * 
         * boolean isDirectory()
         * 判断当前File表示的是否为目录
         */
        if(dir.isDirectory()) {
            /*
             * File[] listFiles()
             * 获取当前目录中的所有子项,数组中每一个
             * 元素就是其中一个子项
             */
            File[] subs = dir.listFiles();
            for(int i=0;i<subs.length;i++) {
                File sub = subs[i];
                System.out.println(sub.getName());
            }
        }    
    }
}

8.将目录中符合过滤器要求的子项获取

/**
 * 获取一个目录下指定的子项
 * File[] listFiles(FileFilter filter)
 * 将目录中符合过滤器要求的子项获取
 */
public class ListFilesDemo2 {
    public static void main(String[] args) {
        /*
         * 获取当前目录中所有名字以"."开头的内容
         */
        File dir = new File(".");
        if(dir.isDirectory()) {
//            MyFilter filter = new MyFilter();
            //匿名内部类定义过滤器
            FileFilter filter = new FileFilter() {
                public boolean accept(File file) {
                    return file.getName().startsWith(".");
                }
            };            
            //回调模式
            File[] subs = dir.listFiles(filter);
            System.out.println(subs.length);
            for(int i=0;i<subs.length;i++) {
                File sub = subs[i];
                System.out.println(sub.getName());
            }
        }
    }
}

class MyFilter implements FileFilter{
    public boolean accept(File file) {
        String name = file.getName();
        System.out.println("正在过滤:"+name);
        return name.startsWith(".");
    }    
}

9.递归删除目录

public class Test {
    public static void main(String[] args) {
        File dir = new File("./a");
        delete(dir);
    }
    /*
     * 删除时首先判断file表示的是否为目录
     * 若是文件则直接删除,若是目录则应当前
     * 获取该目录所有子项并逐个删除后再删除
     * 该目录.
     */
    public static void delete(File file) {
        if(file.isDirectory()) {
            //先将该目录清空
            //1获取该目录中的所有子项
            File[] subs = file.listFiles();
            //2逐个删除子项
            for(int i=0;i<subs.length;i++) {
                File sub = subs[i];
                /*
                 * 递归调用:一个方法内部调用
                 * 自己方法的现象.
                 */
                delete(sub);
            }            
        }
        file.delete();        
    }
}

以上是关于File java IO的主要内容,如果未能解决你的问题,请参考以下文章

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

开销与代码速度(java.io.File 数组与 java.lang.String 数组)

java.io.File 与 java.nio.Files 哪个是新代码中的首选?

java io包File类

Java基础IO类之File类

android java.io.File.fixSlashes(File.java:185)