• IO流之File对象


    File类:

    • 用来将文件或者文件夹封装成对象
    • 方便对文件与文件夹的属性等信息进行操作(因为流只能操作文件中的数据)
    • File对象可以作为参考传递给流的构造函数

      上下级文件夹之间使用分隔符分开:

      在Windows中分隔符为‘’ ,在Unix/Linux中分隔符为‘/’

      跨平台分隔符:专业的做法是使用File.separatorChar,这个值会根据系统得到的相应的分隔符。

      例:new File("c:"+File.separatorChar+"a.txt");

       注意,如果是使用“” ,则需要进行转义,写为“\”才可以

      绝对路径与相对路径:

      绝对路径:c:htmldemo.txt

      相对路径:demo.txt

      对于UNIX平台,绝对路径名的前缀是"/"。相对路径名没有前缀。

      对于Windows平台,绝对路径名的前缀由驱动器号和一个":"组成,例"c:\..."。相对路径没有盘符前缀。

      相对路径:

       相对路径是指相对于某位置的路径,是指相对于当前目录。

       在执行Java程序时,相对路径为执行java命令时当前所在的目录。

    1.构造方法

         

       【代码演示】

     1 import java.io.File;
     2 public class FileDemo {
     3     public static void main(String[] args) {
     4         //构造函数File(String pathname)
     5         File f1=new File("a.txt");
     6         //将a.txt封装成对象。(注意:既可以封装已存在的对象,也可以封装不存在的对象
     7         System.out.println(f1);//(注意上面对象封装的是什么就打印什么)
     8 
     9         //构造函数File(String parent,String child)
    10         String parent="C:\html\test";
    11         String child="demo.txt";
    12         File f2=new File(parent,child);
    13         System.out.println(f2);
    14 
    15         //构造函数File(File parent,String child)
    16         File parent1=new File("c:\html\test");
    17         String child1="java";
    18         File f3=new File(parent1,child1);
    19         System.out.println(f3);
    20 
    21         File f4=new File("c:\html\test\demo.txt");
    22         //由于"c:\html\test\demo.txt"代码不跨平台,在Windows中支持,在linux中却不支持
    23         //所以建议用separator代替\
    24         File f5=new File("c:"+File.separator+"html"+File.separator+"test"+File.separator+"demo.txt");
    25         System.out.println(f5);
    26         System.out.println(f4);
    27     }
    28 }

    2.File对象的常见方法

      创建:boolean  createNewFile():在指定位置创建文件,如果是第一次创建,返回ture,如果是第二次创建文件,由于该文件已存在,则不创建文件并返回false。

                     注意这与流对象是不同的,在流对象中创建的文件已存在时,会覆盖已存在的文件。

         static  File   createTempFile(String prefix,String suffix):在默认临时文件目录中创建一个空文件。运行时创建,运行完即删除。

         static  File   createTempFile(String prefix,String suffix,File directory):重载,在指定目录创建临时文件。

         boolean  mkdir():在指定位置创建一级目录(文件夹)。

         boolean  mkdirs():在指定位置创建多级目录。

         

      删除:boolean  delete():删除文件或目录,删除成功返回true,删除失败返回false。

         boolean  deleteOnExit():该方法实在程序运行完时,删除指定文件。

      判断

         boolean  exists():判断该文件或目录是否存在,若存在则返回true,不存在则返回false。

         bollean   isFile():判断是否为文件。

         boolean  isDirectory():判断是否为目录。

         boolean  isHidden():判断是否为隐藏文件。

         boolean  canExecute():测试该文件是否可执行。

         boolean  canRead():测试该文件是否可读。

        获取:getName():获取名字

         length():获取文件的长度

         lastModified():获取文件最后一次修改时间

         getPath():获取对象封装时的路径

         getParent():获取父目录的路径

         getAbsoluteFile():获取绝对路径(以File的形式返回)

         getAbsolutePath():获取绝对路径(以String的形式返回)

         boolean  renameTo(File  dest):重新命名。

         eg:  File f1=new File("c:\test.java");

           File f2=new File("c:\haha.java");

           f1.renameTo(f2);  

                        //将test文件从f1的位置(c盘中)的移到f2的位置(c盘),并改名为f2的名(haha.txt)

         eg:  File f1=new File("c:\test.java");

           File f2=new File("d:\haha.java");

           f1.renameTo(f2); 

           //将test文件从f1的位置(c盘中)的移到f2的位置(D盘),并改名为f2的名(haha.txt)

           

               

               

               

              

       【代码演示】File对象的常用方法。

     1 import java.io.File;
     2 import java.io.IOException;
     3 
     4 public class FileFuntionDemo {
     5     public static void main(String[] args) throws IOException {
     6         String parent="C:\html\test";
     7         String child="funtion.txt";
     8         File f=new File(parent,child);
     9         System.out.println(f);
    10 
    11         System.out.println("第一次创建文件:"+f.createNewFile());
    12         //此次为第一次创建文件,则返回true
    13         System.out.println("第二次创建文件:"+f.createNewFile());
    14         //此次为第二次创建文件,由于该文件已存在,则不创建文件并返回false。
    15         // 注意这与流对象是不同的,在流对象中创建的文件已存在时,会覆盖已存在的文件。(覆盖的原理是删除已有的,创建新的)
    16         /**
    17          *    f.mkdir();//创建目录
    18          *    f.mkdirs();//创建多级目录
    19          *    要注意:创建的是文件还是目录是由创建方法决定的。
    20          *    即使封装的对象是"funtion.txt",但只要使用的是mkdir()方法,创建出来的就是目录。
    21          *
    22           */
    23 
    24         //System.out.println("删除文件:"+f.delete());
    25         /**
    26          * 这个删除是有缺陷的,当前面代码出现异常时,执行不到这句时,就会造成文件删除失败
    27          * 即使放在try语句的finally中,也是无法执行成功的,因为文件在运行过程中是不允许删除的
    28          * 所以就出现了:deleteOnExit(),该方法是在程序运行完时,删除指定文件。
    29          */
    30         System.out.println("获取名字:"+f.getName());
    31         System.out.println("获取文件长度:"+f.length());
    32         System.out.println("获取文件最后一次修改的时间:"+f.lastModified());
    33         System.out.println("获取文件对象路径:"+f.getPath());//传进来什么打印什么
    34         System.out.println("获取父目录的路径:"+f.getParent());//该方法返回的是绝对路径中的父目录,如果获取的是相对路径,则返回null
    35         System.out.println("获取目录的绝对路径:"+f.getAbsolutePath());//绝对路径,即使文件不存在
    36         System.out.println("判断文件是否存在:"+f.exists());//注意在判断该文件对象是文件还是目录时,要先判断其是否存在。
    37         System.out.println("判断文件是否为文件:"+f.isFile());
    38         System.out.println("判断文件是否为目录:"+f.isDirectory());
    39         System.out.println("判断文件是否为隐藏文件:"+f.isHidden());
    40         System.out.println("判断文件是否可执行:"+f.canExecute());
    41         System.out.println("判断文件是否可读:"+f.canRead());
    42         
    43     }
    44

     运行结果:

      【代码演示】list()方法,listFiles()方法和list(FilenameFilter  filter)方法的区别。

     1 import java.io.File;
     2 import java.io.FilenameFilter;
     3 public class FileDemo2 {
     4     public static void main(String[] args) {
     5         File f=new File("c:\html\test");
     6         //调用list()方法的File对象必须是封装了一个目录,且该目录还必须存在。否则会报空指针异常。
     7         String[] names=f.list();//返回的是指定目录下的所有文件或目录(以相对路径的形式)
     8         for (String name:names) {
     9             System.out.println(name);
    10         }
    11         File[] fname=f.listFiles();//返回的是指定目录下的所有文件或目录(以File对象的形式:绝对路径)
    12         for(File  name:fname){
             System.out.println(name);
           } 13 FilenameFilter filter=new FilenameFilter() { 14 @Override 15 public boolean accept(File dir, String name) { 16 /** 17 * dir指的是该File对象封装的目录,name指的是遍历的File对象封装的目录下的各个子目录(可能是文件,也可能是目录) 18 */ 19 return name.contains("n.txt");//返回文件中包含“n.txt”字段的文件 20 } 21 }; 22 String[] spname=f.list(filter); //该方法具有过滤功能,返回的是符合accept方法中的条件的文件。 23 for (String name:spname) { 24 System.out.println(name); 25 } 26 } 27 }

           运行结果:   

          

      【代码演示】打印出指定目录下的所有文件,包括所有子目录。

     1 import java.io.File;
     2 import java.util.Scanner;
     3 
     4 public class digun {
     5     public static void main(String[] args) {
     6         Scanner in=new Scanner(System.in);
     7         System.out.println("请指定目录:");
     8         String name=in.nextLine();
     9         File file=new File(name);
    10         showAllDir(file);
    11     }
    12     public static void showAllDir(File file){
    13         System.out.println(file);
    14         File[]  filesname=file.listFiles();
    15         for (File name:filesname) {
    16             if (name.isDirectory()){
    17                 showAllDir(name);
    18             }else {
    19                 System.out.println(name);
    20             }
    21         }
    22         return;
    23     }
    24 }

        运行结果:

        【代码演示】打印出指定目录下的所有符合条件的文件或目录,包括所有子目录中的。

     1 import java.io.File;
     2 import java.util.ArrayList;
     3 import java.util.Scanner;
     4 
     5 public class digun {
     6     static  ArrayList arrayList=new ArrayList();
     7     static String ff;
     8     public static void main(String[] args) {
     9         Scanner in=new Scanner(System.in);
    10         System.out.println("请指定目录:");
    11         String name=in.nextLine();
    12         System.out.println("过滤条件:");
    13         ff=in.nextLine();
    14         File file=new File(name);
    15         showAllDir(file);
    16         for (int i = 0; i <arrayList.size() ; i++) {
    17             System.out.println(arrayList.get(i));
    18         }
    19     }
    20     public static void showAllDir(File file){
    21         File[]  filesname=file.listFiles();
    22         for (File name:filesname) {
    23             if(name.getName().contains(ff)){
    24                 arrayList.add(name);
    25             }
    26             if (name.isDirectory()){
    27                 showAllDir(name);
    28             }
    29         }
    30         return;
    31     }
    32 }

      运行结果:

        【代码演示】以树状的形式打印出指定目录下的文件。

     1 import java.io.File;
     2 import java.util.Scanner;
     3 
     4 public class TreeDirectory {
     5     public static void main(String[] args) {
     6         Scanner in=new Scanner(System.in);
     7         System.out.println("请输入指定的目录:");
     8         String filename=in.nextLine();
     9         File file=new File(filename);
    10         showTreeDir(0,file);
    11     }
    12 
    13     public static String level(int level){  //根据层级数,打印该层的前缀
    14         StringBuilder sb=new StringBuilder();
    15         for (int i=0;i<level;i++){
    16             sb.append("	");
    17         }
    18         sb.append("|---");
    19         return sb.toString();
    20     }
    21     public static void showTreeDir(int level,File  file){
    22         level++;  //先将上级目录的层级数加一,变成此目录的层级数
    23         System.out.println(level(level)+file.getName());//然后将调用该方法的层目录打印出来
    24         File[] names=file.listFiles();//将该层目录下的子目录或文件返回来,存储到names数组中
    25         for (int i = 0; i <names.length ; i++) {   //对各个子目录进行遍历
    26             if (names[i].isDirectory()){  //如果是目录,则继续调用showTreeDir方法,并将此层目录的层级数传递给子目录
    27                 showTreeDir(level,names[i]);
    28             }else {//如果是文件,则将文件名打印出来
    29                 System.out.println(level(level+1)+names[i].getName());
    30             }
    31         }
    32     }
    33 }
    34    

      运行结果:

     【代码演示】如何删除一个带内容的目录。

     1 import java.io.File;
     2 import java.util.Scanner;
     3 
     4 public class FileDelete {
     5     public static void main(String[] args) {
     6         Scanner in=new Scanner(System.in);
     7         System.out.println("请输入所要删除的目录:");
     8         String filename=in.nextLine();
     9         File file=new File(filename);
    10         removeDir(file);
    11     }
    12     public static void removeDir(File file){
    13         File[] subfiles=file.listFiles();
    14         //此方法返回的是该层目录的子目录,如果存在子目录,则将子目录存放在一个数组中,然后返回数组的引用,如果不存在子目录,则返回null
    15         if (subfiles==null){   //当数组为空时,说明不存在子目录,则直接删除此目录。
    16          //所以此处判断数组是否为空时,应用subfiles==null来判断,如果用subfiles.length==0判断会报空指针异常
    17             System.out.println(file.delete());
    18         }else { //当数组不为空时,说明存在子目录,则应该先删除子目录。
    19             for (int i = 0; i <subfiles.length ; i++) {
    20                 removeDir(subfiles[i]);
    21             }
    22             System.out.println(file.delete());//所有子目录删除后,再将此目录删除
    23         }
    24     }
    25 }

      注意:Java删除不经过回收站。

          

  • 相关阅读:
    游戏开发流程梳理
    游戏主策化项目进度管控
    游戏主策化项目开发流程
    设计思想之时间和成长理论
    各类监听时间整理
    Django:学习笔记(1)——开发环境配置
    CNN学习笔记:目标函数
    Keras实践:手写数字识别
    Keras实践:实现非线性回归
    CNN学习笔记:卷积神经网络
  • 原文地址:https://www.cnblogs.com/ljl150/p/12341504.html
Copyright © 2020-2023  润新知