IO流之File类

IO流

文件

  • 文件就是保存数据的地方

  • 文件在程序中是以流的形式操作,流是一组有序的数据序列,将数据从一个地方带到另一个地方。

  • 在变量、数组、对象和集合中存储的数据是暂时存在的,一旦程序结束它们就会丢失。为了能够永久地保存程序创建的数据,需要将其保存到磁盘文件中,这样就可以在其他程序中使用它们。Java的IO技术可以将数据保存到文本文件和二进制文件中,以达到永久保存数据的要求。

File类

  • 实现comparable:可以比较;实现serializable:

  • IO流可以帮助我们将数据读取以及写入文件,那么当我们要操作系统的文件和文件夹的时候就需要java.io包中的File类,使用File类进行文件的定位,在通过io流操作数据

  • 在Java中,File类是java.io包中唯一代表磁盘文件本身的对象,即希望在程序中操作文件和目录,都可用通过File类完成。

  • 路径分为绝对路径和相对路径

    • 绝对路径:以盘符(根目录)为开头的路径

    • 相对路径:相对于它所在的项目路径;eg:src/com/zhiyou/io/File.java

  • File类定义了一些方法来操作文件,如新建、删除、重命名文件和目录。


  • 构造方法:创建文件(需抛出异常)需调用createNewFile()方法;

    1. new File(String pathname):根据路径构建一个File对象;如果path是实际存在的路径,则该File对象表示的是目录;如果path是文件名,则该File对象表示的是文件;

    2. new File(String path,String child):根据父目录+子路径构建;path是路径名,child是文件名;

    3. new File(File parent,String child):根据父目录文件+子路径构建;parent是路径对象,child是文件名;

    //创建文件
   @Test//方法一
   public void create01()throws IOException{
       String filePath = "e:/z_practice/news1.txt";
       File file = new File(filePath);//内存中创建文件对象,未涉及硬盘
       file.createNewFile();//硬盘中创建文件
  }
   //方法二
   @Test
   public void create03()throws IOException{
       String filePath = "e:/z_practice";
       String fileName = "news2.txt";
       File file = new File(filePath,fileName);
       file.createNewFile();
  }
   //方法三
   @Test
   public void create02()throws IOException{
       String fileName = "news3.txt";
       File parentFile = new File("e:/z_practice");
       File file = new File(parentFile,fileName);
       file.createNewFile();
  }
  • 删除文件

    • 删除文件需要调用delete()方法;

    • 删除文件需要先调用exists()方法判断文件是否存在;存在就删除,exists()返回true,删除成功,false,删除失败

    • 文件如果存在,原文件内容会丢失

public void cr() throws IOException{//抛出异常
  //创建、删除文件
       File file = new File("e:/test.txt");
       if (file.exists()){
           file.delete();
      }
       file.createNewFile();
  } }
  • 常用方法:

        String path = "e:/";
       File f = new File(path ,"a.txt");
       System.out.println("a.txt文件是否存在" + f.exists());//文件是否存在
       System.out.println("a.txt文件长度" + f.length());//长度
       System.out.println("a.txt" + (f.isFile()?"是文件":"不是文件"));//判断是否是文件
       System.out.println("a.txt" + (f.isDirectory()?"是目录":"不是目录"));//判断是否是目录
       System.out.println("a.txt" + (f.canRead()?"可读":"不可读"));//判断是否可读
       System.out.println("a.txt" + (f.canWrite()?"可写":"不可写"));//判断是否可写
       System.out.println("a.txt" + (f.isHidden()?"是隐藏文件":"不是隐藏文件"));//是否隐藏文件
       System.out.println("a.txt最后修改日期" + new Date(f.lastModified()));//最后修改日期
       System.out.println("a.txt文件名称" + f.getName());//获取文件名称
       System.out.println("a.txt父目录" + f.getParent());//获取父目录
       System.out.println("a.txt文件路径" + f.getPath());//获取文件路径
       System.out.println("a.txt绝对路径" + f.getAbsolutePath());
  • 常用常量

    • pathseparator:表示分割连续 多个路径字符串的分隔符;在Windows中指;

    • separator:用来分割同一个路径字符串中的目录,Windows中指/,java中还可以用\\表示

    编写路径时一定用上述方法表示分隔符,以确保java程序的可移植性;因为不同系统的分隔符表示或许不同


  • 创建、删除目录(不需抛出异常)

    • 删除目录需要调用delete()方法;创建目录调用madir()(创建一级目录)方法,madirs()(创建多级目录)方法;

    • 无论创建还是删除目录通常都先调用exists()方法判断目录是否存在;不存在则创建,存在提示存在

    • 如果目录内存在文件,则不会删除

        String path = "e:/xxt";//创建目录位置
       File file = new File(path);//创建File对象
       if (file.exists()){//判断
             System.out.println("目录存在" );
      }else {
           if(file.mkdir()){//创建一级目录,并返回布尔值
                System.out.println("创建成功" );
          }else {System.out.println("创建失败" );
                }
      }
        String path = "e:/z_practice";//确定目录位置
       File file = new File(path);//创建File对象
       if (file.exists()){//判断
           System.out.println("目录存在" );
           System.out.println(file.delete());
      }else {
               System.out.println("目录不存在" );
          }
  • 遍历目录

    • 通过遍历目录可以在指定的目录中查找文件,或者显示所有的文件列表,File类的list()方法提供了遍历目录功能;该方法有两种重载形式:

    • String[] list():该方法表示返回由File对象表示目录中所有文件和文件夹名称组成的字符串数组,如果调用该方法的不是目录,返回null;

    • String [] list (FilenameFilter filter):作用同list(),不同的是返回的数组仅包含符合filter过滤器的文件和文件夹,如果filter为null,则接收所有名称;

     //list()方法
 File file = new File("d:/");//创建变量
     System.out.println("文件名称\t\t文明类型\t\t文件大小");
     System.out.println("=========================");
     String fileList[] = file.list();
     for (int i = 0; i < fileList.length; i++) {//list()返回数组,需要获取File对象,再获得属性
          System.out.print(fileList[i] + "\t\t");
          System.out.print(new File("d:\"",fileList[i]).isFile()?"文件"+ "\t\t":"文件夹" + "\t\t");
          System.out.print(new File("d:\"",fileList[i]).length() + "字节" );
      }
//list(FilenameFilter  filter)方法
//创建listFilter过滤器,类型为FilenameFilter;调用list()传入过滤器即可
class listFilter implements FilenameFilter{
       //实现FilenameFilter 接口
       @Override
       public boolean accept(File dir, String name) {
           //指定允许的文件类型
           return name.endsWith(".txt") ||name.endsWith(".bak");
      }
  }
 
posted @ 2022-08-19 09:46  许多多被注册了  阅读(216)  评论(0编辑  收藏  举报