美文网首页
java——IO讲解一(File)

java——IO讲解一(File)

作者: 这颗螺丝钉姓赵 | 来源:发表于2017-03-22 10:58 被阅读0次

    IO:I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。 在POSIX兼容的系统上
    java_IO:Java IO 是一套Java用来读写数据(输入和输出)的API。大部分程序都要处理一些输入,并由输入产生一些输出。Java为此提供了java.io包。
    java_IO的原理图:


    无标题.png

    上面的java程序通过i/o传递给JVM,JVM传给WINDOWS,最后WINDOWS操作。
    想要对这些数据进行持久化等操作,需要一些技术完成其它设备上的数据操作。就需要用到I/O技术,而我们使用的是java中提供的I/O技术。

    数据保存在硬盘上最终的体现都是文件,所有我们最先了解I/O对文件的操作:File类。
    File类只能对操作文件或目录本身,不能操作文件里面的内容,如果要操作文件中的内容,需要用到后面的内容,流的思想。
    File的一些常见的方法:
    ·public File(String pathname):【创建文件对象,pathName是文件夹+[文件名]组成】

    ·public boolean createNewFile() throws IOException 【创建一个文件,不是文件夹】

    ·public boolean delete():【删除文件,删除的是当前文件对象的子文件对象】

    ·public boolean exists():【判断当前文件对象所对饮的目录在磁盘中是否存在】

    ·public String getName():【获取文件对象的名称】

    ·public String getParent():【获取文件所在的目录】

    ·public boolean isDirectory():【判断当前对象是否是一个文件夹】

    ·public boolean isFile():【判断当前对象是否是文件】

    ·public long length():【获取文件的大小,以字节为单外返回】

    ·public String[] list():【获取当前文件目录下的所有文件对象的名称(第一目录)】

    ·public File[] listFiles():【获取当前文件目录下所有文件对象(第一目录)】

    ·public boolean mkdir():【新建一个文件夹,该文件夹不能有子文件目录】

    ·public boolean mkdirs();【创建一个文件夹,可以包括子文件目录】

    ·public static final String separator【该属性可以根据不同的操作系统取得不同的文件分割符】

    示例:

    package com.zhaoqiang.file;
    
    import java.io.File;
    import java.io.IOException;
    
    public class Demo1 {
    
        public static void main(String[] args) throws Exception {
            // 创建一个File对象
            File f = new File("d:\\Demo\\demo.txt");
            
            
            /* // File.separator是自动获取当前系统的分隔符
             * // 将demo文件封装成对象
             * 注意:如果d盘中不存在Demo目录。File也可以封装不存在的文件对象
             * */
            File f2 = new File("d:"+File.separator+"Demo"+File.separator+"demo.txt"); 
            
            
            // 父目录和子目录分开写。在子目录不确定的情况下可以这样写
            File f3 = new File("\"d:"+File.separator+"Demo\"","demo.txt");
            
            /*
             * exists:判断当前文件对象是否在磁盘中存在
             * getParentFile()获取父目录对象。
             * mkdirs():创建文件夹
             * */
            
            if (!f2.getParentFile().exists()) {
                f2.getParentFile().mkdirs();
                f2.createNewFile();
            }
            
            // 获取文件所在目录
            System.out.println(f2.getParent());
            
            // 判断当前对象是否是一个文件夹
            System.out.println(f2.getParentFile().isDirectory());
            
            // 判断当前对象是否是一个文件
            System.out.println(f2.isFile());
            
            // 获取文件的大小,大小以字节返回
            System.out.println(f2.length());
            
            // 获取当前文件目录下的所有文件对象名称(第一目录(同级目录))
            String[] list = f2.list();
            
            // 获取当前文件目录下的所有文件对象
            File[] file = f2.listFiles();
            // 删除文件
            f2.delete();
            
            // 删除文件夹中所有文件
            f2.getParentFile().delete();
        }
    
    }
    
    

    过滤器:public File[] listFiles(FilenameFilter filter)

    package com.zhaoqiang.file;
    
    import java.io.File;
    
    public class Demo3 {
    
        public static void main(String[] args) {
            /*
             *  过滤器:
             *  
             *  需求:获取目录中的内容,但是只要.java文件
             * */
            
            File dir = new File("D:"+File.separator+"Demo");
            File[] file = dir.listFiles();
            for(File f:file){
    //          if (f.getName().endsWith(".java")) {
    //              System.out.println(f.getName());
    //          }
                getFile(f,".java");
            }
            
        }
        
        
        // 自定义一个简单的过滤器
        public static void getFile(File file,String str){
            if (file.getName().endsWith(str)) {
                System.out.println(file.getName());
            }
        }
    
    }
    
    

    通过实现FilenameFilter接口,创建一个比较器对象

    package com.zhaoqiang.file;
    
    import java.io.File;
    import java.io.FilenameFilter;
    
    class Filename implements FilenameFilter{
    
        private String str;
        public Filename(String str) {
            this.str = str;
        }
        @Override
        public boolean accept(File dir, String name) {
    //      if (dir.getName().endsWith(name)) 
    //          return true;
    //      else
    //          return false;
            return name.endsWith(str);
        }
        
    }
    
    
    public class Demo3 {
    
        public static void main(String[] args) {
            /*
             *  过滤器:
             *  
             *  需求:获取目录中的内容,但是只要.java文件
             * */
            
            File dir = new File("D:"+File.separator+"Demo");
            
    //      File dic = new File(dir,"demo.txt");
    //      File[] file = dir.listFiles();
            File[] file = dir.listFiles(new Filename(".java"));
            
            
             /*
                    public File[] listFiles(FilenameFilter filter) {
                    String ss[] = list();   调用了File中list方法,获取所有的名称数组
                    if (ss == null) return null;    // 判断目录中是否有文件
                    ArrayList<File> files = new ArrayList<>();  // 创建一个集合,用于存放文件对象
                    for (String s : ss)                     // 遍历数组里面文件对象名称
                        if ((filter == null) || filter.accept(this, s))  //对遍历的名称进行过滤器的判断,将当期目录this,遍历到的名称传递给了过滤器
                            files.add(new File(s, this));           // 把满足条件的文件添加进集合中
                    return files.toArray(new File[files.size()]);           // 将集合转化成数组返回
                }   
              */        
            
            
            for(File f:file){
    //          if (f.getName().endsWith(".java")) {
                    System.out.println(f.getName());
    //          }
    //          getFile(f,".java");
                
            }
            
        }
        
        
        // 自定义一个简单的过滤器
        public static void getFile(File file,String str){
            if (file.getName().endsWith(str)) {
                System.out.println(file.getName());
            }
        }
    
    }
    
    
    

    示例:获取d盘下所有目录

    package com.zhaoqiang.file;
    
    import java.io.File;
    
    public class Demo2 {
    
        public static void main(String[] args) {
            File f = new File("D:"+File.separator);
            
            File[] file = f.listFiles();
            
            for(File f1:file){
                System.out.println(f1);
            }
    
        }
    
    }
    
    

    上面的方法只能获得d盘下的一级目录,并不能获取到D盘下所有的目录,所以我们需要用到递归:

    package com.zhaoqiang.file;
    
    import java.io.File;
    
    public class Demo2 {
    
        public static void main(String[] args) {
            File f = new File("D:"+File.separator);
            
            printDirs(0,f);
        }
        
        public static void printDirs(int level,File f){
            for (int i = 0; i < level; i++) {
                System.out.print("  ");
            }
            
            // 获取文件名
            System.out.println(f.getName());
            
            if (f.isDirectory()) { // 如果文件是文件夹
                File fs[] = f.listFiles();
                for(File f1:fs){
                    // 递归调用
                    printDirs(level+1,f1);
                }
            }
                
        }
    }
        
    

    相关文章

      网友评论

          本文标题:java——IO讲解一(File)

          本文链接:https://www.haomeiwen.com/subject/qxfonttx.html