JavaSE01_Day02(下)-File类

一、面试题作业讲解

答案:true true

       第一个输出结果解析: Integer包装类底层有一个缓存机制,目的是减少内存开销,Integer这个包装类中有一个字节的缓存,如果说值在[-128~127]之间,就直接使用缓存中的数据;如果说值不在这个范围内,则以对象的形式返回,所以最终在使用==进行比较两个引用变量首地址的值是否相等时,如果值在 [-128~127]范围内返回true,反之返回false。

       第二个输出结果解析: Integer包装类中已经重写了超类Object中的equals方法,所以当两个变量i1和i2的值一样时,返回值为true。

 

二、File类

       File类是用于表示硬盘中的文件或者目录的一个类,这个类可以提供访问文件或者目录的基本信息,以及可以进行访问一个目录的子项,可以进行操作文件或者目录,但是需要注意不能对文件中的数据进行访问操作。

使用File可以做到:

  1. 访问其表示的文件或目录的属性:名字、大小、修改时间等。

  2. 操作文件或目录(创建或删除)

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

  4. 但是不能访问文件数据

2.1 使用File类获取文件信息

 package cn.tedu.file;
 
 import java.io.File;
 import java.io.IOException;
 
 /**
  * 使用File类获取文件信息案例
  * @author cjn
  *
  */
 public class FileDescDemo01 {
  public static void main(String[] args) throws IOException {
  /*
  * 路径分类:
  * 1.相对路径:以一个事物进行参照,相对而言的路径,
  * 优点:可以让项目中有关于路径访问的操作移植性更好,
  * 如果在不同的操作系统,或者相同操作系统的不同电脑,
  * 都可以找到对应位置下的资源,./表示当前项目位置。
  *
  * 2.绝对路径:就是一个完全限定的路径,也就是一个文件或者文件夹。
  * 在电脑中磁盘的具体位置,弊端是使用绝对路径移植性较差,如果
  * 是不同的操作系统,或者相同操作系统的不同电脑,查找资源容易找不到。
  *
  * 注意:路径表示的时候写/或者\都可以,如果是使用的/,则不需要使用转义字符进行转义就可以识别
  *     如果是使用\,则需要使用转义字符\进行识别路径中的\。
  */
         //()中指定文件或目录路径(实际上表示的是一个抽象路径)
  File file = new File("./file/test.txt");
  System.out.println(file);
  /*
  * 查看文件的绝对路径
  * getAbsolutePath:该方法不会对路径中的./或者../进行解析
  * getCanonicalPath:该方法会对路径中的./或者../进行解析
  */
  System.out.println(file.getCanonicalPath());
  System.out.println(file.getAbsolutePath());
 
  System.out.println("-----下面是调用API查看文件信息------");
  //查看文件的名称
  String name = file.getName();
  System.out.println("文件名称:"+name);
  //查看文件是否是隐藏文件
  boolean isHidden = file.isHidden();
  System.out.println("文件是否隐藏:"+isHidden);
  //查看文件的状态(可读可写)
  boolean canRead = file.canRead();
  System.out.println("文件是否可读:"+canRead);
  boolean canWrite = file.canWrite();
  System.out.println("文件是否可写:"+canWrite);
 
  //查看文件的大小
  long length = file.length();
  System.out.println("文件大小为:"+length);
  /*
  * 查看文件最后的修改时间(毫秒值)
  * 如果希望转换为可以识别的一个时间例如:年月日时分秒
  * 会在第二阶段末尾学习日期时教大家
  */
  long time = file.lastModified();
  System.out.println("文件最后的修改时间为:"+time);
  //判断某一个文件是否存在
  boolean isExists = file.exists();
  System.out.println("文件是否存在:"+isExists);
  /*
  * 对file目录下的test.txt文件进行判断
  * 判断是否是一个文件夹 isDirectory()
  * 判断是否是一个文件isFile()
  */
  boolean isDirectory = file.isDirectory();
  System.out.println("是否是一个文件夹:"+isDirectory);
  boolean isFile = file.isFile();
  System.out.println("是否是一个文件:"+isFile);
  }
 
 }

测试结果:

 .\file\test.txt
 D:\2103班级\workspace\javase02\file\test.txt
 D:\2103班级\workspace\javase02\.\file\test.txt
 -----下面是调用API查看文件信息------
 文件名称:test.txt
 文件是否隐藏:false
 文件是否可读:true
 文件是否可写:true
 文件大小为:10
 文件最后的修改时间为:1623156446886
 文件是否存在:true
 是否是一个文件夹:false
 是否是一个文件:true

       有关于打印的结果信息,文件的绝对路径不会和我的一模一样。文件内添加的内容不会一模一样,所以这个文件大小也不会一模一样。还有文件的最后修改时间,是当前自身电脑中文件的最后修改时间.

       注意:创建File时要指定路径,而路径通常使用相对路径,相对路径的好处在于有良好的跨平台性。 “./”(或“.”或不写)是相对路径中使用最多的,表示“当前目录”,而当前目录是哪里,取决于程序运行环境而定,在eclipse、idea中运行Jva程序时,这里指定的当前目录就是当前程序所在的项目(工程)目录。

 

2.2 创建文件createNewFile()

 package cn.tedu.file;
 
 import java.io.File;
 import java.io.IOException;
 
 /**
  * 创建文件案例
  * 在javase02项目的file目录中创建bao.txt文件
  * @author cjn
  *
  */
 public class FileCreateDemo02 {
  public static void main(String[] args) throws IOException {
  File file = new File("./file/bao.txt");
  /*
  * 为了程序的严谨性进行一个条件判断
  *
  */
  if (!file.exists()) {
  //当bao.txt文件不存在,就创建该文件createNewFile()
  file.createNewFile();
  System.out.println("bao.txt文件创建完毕");
  } else {
  System.out.println("bao.txt已经存在!!!");
  }
  }
 }

测试结果:

 bao.txt文件创建完毕

但是在项目的file目录下并没有bao.txt文件,需要项目右键找到refresh进行刷新,即可显示。

 

2.3 删除文件delete()

 package cn.tedu.file;
 
 import java.io.File;
 
 /**
  * 删除file目录下的bao.txt文件
  * @author cjn
  *
  */
 public class FileDeleteDemo03 {
  public static void main(String[] args) {
  /*
  *路径中的"/"也称之为是分隔符,可以通过代码的方式表示"/":File.separator
  *
  */
  File file = new File("."+File.separator+"file"+File.separator+"bao.txt");
  //严谨性判断
  if (file.exists()) {
  //如果文件存在调用delete方法进行删除
  file.delete();
  System.out.println("该文件已经删除");
  } else {
  System.out.println("文件不存在!");
  }
  }
 }

删除bao.txt文件以后,项目下的file目录仍然会显示该文件,需要项目右键找到refresh进行刷新,即可显示。

 

2.4 创建文件夹mkdir()

 package cn.tedu.file;
 
 import java.io.File;
 
 /**
  * 创建文件夹案例
  * @author cjn
  *
  */
 public class FileCreateDirDemo04 {
  public static void main(String[] args) {
  /*
  * 在当前项目下创建一个名字叫demo的目录文件夹,
  * 这个文件是一个空文件夹,里面没有任何的内容
  * 不加./和加./效果一样
  */
  File file = new File("demo");//省略./
  //严谨性判断
  if (file.exists()) {
  //存在
  System.out.println("demo目录已经存在");
  } else {
  //不存在,创建目录,mkdir这个方法名参考于Linux指令
  file.mkdir();
  System.out.println("demo目录创建完毕");
  }
  }
 }

在项目下创建demo目录以后,需要项目右键找到refresh进行刷新,即可显示。

注意:mkdir必须在父级目录存在的情况下创建子集目录,不能直接创建多级目录,创建多级目录需要mkdirs()。

 

2.5 创建多级文件夹mkdirs()

 package cn.tedu.file;
 
 import java.io.File;
 
 /**
  * 创建多级文件夹案例
  * @author cjn
  *
  */
 public class FileCreateDirsDemo05 {
  public static void main(String[] args) {
  /*
  * 在当前项目下的创建baojq/a/b/c/d/e/f
  */
  File file = new File("baojq/a/b/c/d/e/f");
  //严谨性判断
  if (file.exists()) {
  System.out.println("多级目录已经存在!!!");
  } else {
  //不存在多级目录或者多级目录中某一级,会进行创建
  file.mkdirs();
  System.out.println("多级目录已经创建完毕");
  }
  }
 }

在项目下创建多级目录以后,需要项目右键找到refresh进行刷新,即可显示。

使用File创建目录总结:

  • mkdir():创建当前File表示的目录,父目录必须都存在

  • mkdirs():创建当前File表示的目录,同时将所有不存在的父目录一同创建

     

2.6 删除空目录delete()

 package cn.tedu.file;
 
 import java.io.File;
 
 /**
  * 删除空目录案例
  * @author cjn
  *
  */
 public class FileDeleteDirDemo06 {
  public static void main(String[] args) {
  /*
  * 注意事项:
  * 如果想要删除目录,那么当调用delete方法
  * 只能删除空目录,也就是要删除的目录中不包含其他内容,
  * 在当前项目下,符合条件的只有一个demo目录为空目录,
  * 那么需求是删除demo空目录
  */
  File file = new File("./demo");
  if (file.exists()) {
  //存在该目录,删除
  file.delete();
  System.out.println("删除demo目录成功");
  } else {
  System.out.println("删除demo目录失败");
  }
  }
 }

在项目下删除空目录以后,需要项目右键找到refresh进行刷新,即可显示。

 

2.7 获取当前目录下的所有子项listFiles()

  • 子项指代的是指定目录的下级资源(目录、文件等等),但是孙子项,曾孙项...是不可以当做是子项的。

 package cn.tedu.file;
 
 import java.io.File;
 import java.io.FilePermission;
 
 /**
  * 获取指定目录的子项
  * @author cjn
  *
  */
 public class FilelistFilesDemo07 {
  public static void main(String[] args) {
  File file = new File("./baojq");
  /*
  * 当需要获取目录的子项时,需要加严谨性判断,
  * 判断一下该目录是不是一个目录资源
  */
  if (file.isDirectory()) {
  //如果是文件夹目录,获取子项
  File[] files = file.listFiles();
  //输出数组中的子项内容
  for (int i = 0; i < files.length; i++) {
  System.out.println(files[i].getName());
  }
  } else {
  System.out.println("该资源不是目录,不可以获取资源子项!!!");
  }
  }
 
 }
posted @ 2021-06-08 23:40  Coder_Cui  阅读(107)  评论(0编辑  收藏  举报