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+"\n路径:"+filePath+"\n绝对路径: "+fileAbsolutePath+"\n父文件路径:"+parentPath;    

41             filemsg+="\n文件大小"+size+"\n最后修改时间:"+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");

      }

你可能感兴趣的:(java io)