• Java IO流中的File类学习总结


    一、File类概述

      File类位于java.io包中,是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类有多种重载的构造方法。File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的相对路径和绝对路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。File类操作文件的重要性有:

    a:如何跨平台问题

    b:文件编码问题,尤其是多语言平台情况下如何正常工作。

    c:文件读写效率、操作效率

    d:文件加密和文件安全

    e:文件快速检索,强烈建议使用lence进行文件检索及文件管理。

    二、File类的对象功能

    1.创建和删除的操作

    (1).创建文件

      当我们创建文件时,先要产生File类的对象,可以通过File类的各种构造方法来获取该对象,然后在创建文件的时候,我们要先判断要创建的文件是否已存在,如果不存在,则创建,否则不创建,File类的构造方法有:

    File(String pathName) 传递一个文本路径来创建对象

    File(URI fileUri) 传递一个URI来创建对象

    File(File fileDir,String fileName)

    File(String,File)

    File(String,int)

    File(String filePath,String fileName)

    下面演示一个创建文件的方法:

     1   /***
     2          * 创建文件的方法
     3          * @param fileName
     4          */
     5         public static void creatFile(String fileName){
     6             File file=new File(fileName);
     7             if(!file.exists())//判断文件是否存在   
     8                 {    
     9                     try{
    10                         
    11                         new File(file.getParent()).mkdirs();//建立上层文件夹     
    12                         file.createNewFile();//创建文件,执行此语句才产生该文件    
    13                         
    14                         }     
    15                     catch(IOException e){
    16                         
    17                         e.printStackTrace();   
    18                         
    19                         }    
    20                 } 
    21             else{     
    22                 
    23                 System.out.println("文件已存在");
    24                 
    25                 }    
    26             //获取文件名    
    27             String filename=file.getName();   
    28             //获取文件路径    
    29             String filePath=file.getPath();    
    30             //获取文件绝对路径    
    31             String fileAbsolutePath=file.getAbsolutePath();   
    32             //获取父亲文件路径    
    33             String parentPath=file.getParent();    
    34             //获取父亲文件名    
    35             String parentName=new File(file.getParent()).getName();   
    36             //获取文件大小    
    37             long size=file.length();    
    38             //获取最后一次修改时间    
    39             long lastTime=file.lastModified();      
    40             String filemsg="文件名:"+filename+"
    路径:"+filePath+"
    绝对路径: "+fileAbsolutePath+"
    父文件路径:"+parentPath;    
    41             filemsg+="
    文件大小"+size+"
    最后修改时间:"+new  Timestamp(lastTime);   
    42             System.out.println(filemsg);     
    43             System.out.println("父亲节点文件夹名称"+parentName);
    44         }
    45         
    46         public static void main(String args[]){
    47             creatFile("E:\Mytest.txt");
    48         }

    运行结果如下:

    文件已存在

    文件名:Mytest.txt

    路径:E:Mytest.txt

    绝对路径: E:Mytest.txt

    父文件路径:E:

    文件大小0

    最后修改时间:2014-06-04 19:51:26.846

    (2).移动文件

      在某些情况下我们需要讲一个文件从某个地方移到另一个地方,并且对他重命名,这时我们可以使用File对象的renameTo(File toFile)方法来轻松实现,实现代码如下:

     1   /**修改文件路径及名称,内容也一块移动过去了,相当于“移动”   
     2      *
     3      *@param fromPath   
     4      *@param toPath   
     5      **/   
     6     public static void refileName(String fromPath,String toPath){   
     7         File file1=new File(fromPath);   
     8         File file2=new File(toPath);   
     9         //判断file2路径是否存在,不存在则创建   
    10         if(!file2.exists()){   
    11             
    12             new File(file2.getParent()).mkdirs();   
    13             
    14         }     
    15         file1.renameTo(file2);
    16         //修改文件名称及路径   
    17         System.out.println(fromPath+"文件已移动及重命名到"+toPath); 
    18         
    19     }
    20     
    21     public static void main(String args[]){
    22         refileName("E:\Mytest.txt","F:\test.txt");
    23     }

    (3).文件复制

      文件复制可以利用FileInputStream(File formFile)FileOutputStream(File toFile)将一个文件复制到目的地,具体代码如下:

     

     1 /**复制一个文件   *     
     2      * @param src   
     3      * @param des   
     4      * */   
     5     public static void copyFile(String src, String des)
     6     {     
     7         File file1 = new File(src);       
     8         File fileDir=new File(des);//产生文件的上层文件夹对象   
     9         String topath = des + "\" + file1.getName();   
    10         File file2 = new File(topath);//产生文件对象
    11         if(!file1.exists()){
    12             
    13             System.out.print("原文件不存在!");
    14         }
    15         if(!fileDir.exists()){
    16             
    17             fileDir.mkdirs();//创建文件夹  
    18             
    19             }    
    20         if(file2.exists())   { 
    21             
    22             file2.delete();//目标位置有该文件,则删除  
    23             
    24             }   
    25         try{      
    26                 
    27             InputStream inStream = new FileInputStream(file1); // 读入原文件
    28                 
    29             FileOutputStream fs = new FileOutputStream (file2);   
    30                 
    31             byte[] buffer = new byte[4098];   
    32                 
    33             int byteread=0;   
    34                 
    35             while ((byteread = inStream.read(buffer)) != -1) 
    36             {    
    37                 fs.write(buffer, 0, byteread); 
    38                       
    39              }    
    40             inStream.close();   
    41             fs.close();    
    42             System.out.println("文件复制成功,新路径为"+topath);
    43             
    44           }    
    45         catch(IOException e)
    46         {    
    47             e.printStackTrace();    
    48         }   
    49       } 
    50     
    51     public static void main(String args[]){
    52         copyFile("F:\test.txt","E:\");
    53       }

     

    (4).遍历文件夹中的文件

      在遍历文件夹中的文件时,要用到递归的思想,其次要考虑当File对像还是文件夹时,继续递归,否则,打印文件文件名到控制台。利用File对象的listFiles()方法获得该路径下的文件或文件夹,然后递归。代码如下:

     1   /**    
     2      * 遍历一个文件夹下的文件,并显示文件名称   
     3      * @param path   
     4      * */   
     5     public static void searchFile(String path)
     6     {   
     7         File file=new File(path);    
     8         File[] files=file.listFiles();//file下的文件或文件夹   
     9         System.out.println(path+"目录下的文件数有"+files.length);   
    10         for(File f:files)
    11         {    
    12             if(f.isFile())
    13             {     
    14                 System.out.println(f.getName());     
    15             }     
    16             else if(f.isDirectory())
    17             {      
    18                 searchFile(f.getPath());//递归    
    19             }    
    20         }      
    21     }
    22         
    23     
    24     public static void main(String args[]){
    25         searchFile("F:\服务");
    26       }

    (5).复制文件夹或文件

      复制一个目录中的所有文件,这个目录有可能是文件夹,所以要用到递归思想,代码如下:

     1   /**复制一个文件   *     
     2      * @param src   
     3      * @param des   
     4      * */   
     5     public static void copyFile(String src, String des)
     6     {     
     7         File file1 = new File(src);       
     8         File fileDir=new File(des);//产生文件的上层文件夹对象   
     9         String topath = des + "\" + file1.getName();   
    10         File file2 = new File(topath);//产生文件对象
    11         if(!file1.exists()){
    12             
    13             System.out.print("原文件不存在!");
    14         }
    15         if(!fileDir.exists()){
    16             
    17             fileDir.mkdirs();//创建文件夹  
    18             
    19             }    
    20         if(file2.exists())   { 
    21             
    22             file2.delete();//目标位置有该文件,则删除  
    23             
    24             }   
    25         try{      
    26                 
    27             InputStream inStream = new FileInputStream(file1); // 读入原文件
    28                 
    29             FileOutputStream fs = new FileOutputStream (file2);   
    30                 
    31             byte[] buffer = new byte[4098];   
    32                 
    33             int byteread=0;   
    34                 
    35             while ((byteread = inStream.read(buffer)) != -1) 
    36             {    
    37                 fs.write(buffer, 0, byteread); 
    38                       
    39              }    
    40             inStream.close();   
    41             fs.close();    
    42             System.out.println("文件复制成功,新路径为"+topath);
    43             
    44           }    
    45         catch(IOException e)
    46         {    
    47             e.printStackTrace();    
    48         }   
    49       } 
    50     
    51     /**    
    52      * 复制一个文件夹,从src拷贝到des,src里面可能是文件夹或文件。   
    53      * @param src   
    54      * @param des   
    55      * */   
    56     public static void copyDir(String src,String des)
    57     {   
    58         File file1=new File(src);    
    59         File file2=new File(des); 
    60         if(!file2.exists())
    61         {    
    62             file2.mkdirs();    
    63         }
    64         File[] files=file1.listFiles();   
    65         for(File f:files)
    66         {    
    67             if(f.isFile())
    68             {         
    69                 copyFile(f.getPath(),des+"\"+new             File(f.getParent()).getName());//注意,目标路径要加上这一层文件夹的名称,作为下次调用的新目标路径
    70                    
    71             }    
    72             else if(f.isDirectory())
    73             {         
    74                 copyDir(f.getPath(),des+"\"+new          File(f.getParent()).getName());//递归    
    75                 }   
    76             }   
    77      }
    78     
    79     
    80     public static void main(String args[]){
    81         copyDir("F:\服务","e:\服务");
    82       }

    (6).删除某个目录下的文件和文件夹

      如果该目录是文件则直接删除,否则利用递归思想,首先利用File对象的listFiles()方法获得所有文件或文件夹,然后利用for(Object o: Objects)来遍历其中的对象,判断该对象是否为文件,如果是文件则删除,否则继续递归。当把所有的文件删除后还要删除该文件夹,注意不要重复误删除。代码如下:

     

      /**    
         * 删除某个目录下的文件和文件夹,也包括该目录 
         * @param src   
         * @param des   
         * */   
        public static void deleteDir(String srcDir)
        {   
            File file1=new File(srcDir); 
            
            if(!file1.exists())
            {    
                System.out.print(srcDir+" 目录不存在!");
                return;
            }
            
            if(file1.isFile()){
                if(file1.delete()){
                    System.out.println("文件--"+file1.getAbsolutePath()+"删除成功");
                }else{
                    System.out.println("文件--"+file1.getAbsolutePath()+"删除失败");
                }
                return;
            }
            
            File[] files=file1.listFiles();   
            for(File f:files)
            {    
                if(f.isFile())
                {         
                    if(f.delete()){
                        System.out.println("文件--"+f.getAbsolutePath()+"删除成功");
                    }else{
                        System.out.println("文件--"+f.getAbsolutePath()+"删除失败");
                    }
                       
                }    
                else
                {         
                    deleteDir(f.getPath());//递归  
                }   
            }
            
            if(file1.delete()){
                System.out.println("文件夹--"+file1.getAbsolutePath()+"删除成功");
            }else{
                System.out.println("文件夹--"+file1.getAbsolutePath()+"删除失败");
            }
         }
        
        
        public static void main(String args[]){
            deleteDir("E:\dd");
          }
  • 相关阅读:
    python多版本与虚拟环境
    前端开发:基于cypress的自动化实践
    Selenium 4.0beta:读源码学习新功能
    Selenium 4.0beta: Grid 工作原理
    自己上手写性能工具(三)
    如何实现共享屏幕标注功能?
    资源下载网站
    修改tmux背景色
    使用nas唤醒其他PC主机
    2021.26 富兰克林效应
  • 原文地址:https://www.cnblogs.com/zhishengyong/p/3788465.html
Copyright © 2020-2023  润新知