• IO流


    一、File

    Io概述:

    当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。

    当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

    因此我们把这种输入和输出动作称为IO操作

    File类的构造函数:

    文件及文件夹的一系列操作方法:

    代码实现:

      1 package com.oracle.io;
      2 
      3 import java.io.File;
      4 import java.io.IOException;
      5 
      6 //File 类包含
      7 //1.路径 path  e:\java_code\day22e\hello.java
      8 //2.目录 directory   文件夹
      9 //3.文件 file
     10 public class Demo01 {
     11     public static void main(String[] args) throws IOException {
     12         /*method2();
     13         method3();
     14         method4();
     15         method5();
     16         method6();
     17         method7();
     18         method8();
     19         method9();*/
     20         method10();
     21     }
     22     public static void method1(){
     23         //与系统有关的路径分隔符win ; Linux :
     24                 System.out.println(File.pathSeparator);
     25                 //与系统有关的名称分隔符win  Linux /
     26                 System.out.println(File.separator);
     27     }
     28     public static void method2(){
     29         //File类构造方法不会给你检验这个文件或者文件夹是否真实存在
     30         //File file=new File("X:\test\a.txt");
     31         //File file=new File("X:","test");
     32         File f1=new File("X:\test");
     33         File file=new File(f1,"a.txt");
     34         System.out.println(file);
     35     }
     36     public static void method3(){
     37         //File file=new File("X:\test\a.txt");
     38         File file=new File("src");
     39         //相对路径走的是本工程路径
     40         System.out.println(file.getAbsolutePath());
     41         
     42     }
     43     public static void method4(){
     44         //获取本路径目录名或者文件名
     45         File file=new File("X:\test\a.txt");
     46         System.out.println(file.getName());
     47         //getPath()和toString()一个作用
     48         System.out.println(file.getPath());
     49         //返回文件的长度long(字节数)
     50         System.out.println(file.length());
     51     }
     52     public static void method5() throws IOException{
     53         //创建文件(只能创建文件不能创建文件夹)
     54         File file=new File("X:\test\b.txt");
     55         boolean flag=file.createNewFile();
     56         System.out.println(flag);
     57     }
     58     public static void method6(){
     59         //创建文件夹(不能创建文件)
     60         File file=new File("X:\test\e\f");
     61         //boolean flag=file.mkdir();//单级目录
     62         boolean flag=file.mkdirs();//多级目录
     63         System.out.println(flag);
     64     }
     65     public static void method7(){
     66         //删除文件或文件夹
     67         //直接从硬盘上删除,不走回收站
     68         //删除需谨慎
     69         File file=new File("X:\test\b.txt");
     70         boolean flag=file.delete();
     71         System.out.println(flag);
     72     }
     73     public static void method8(){
     74         File file=new File("X:\test\a.txt");
     75         //判断file对象表示的文件或文件夹是否真实存在
     76         //boolean flag=file.exists();
     77         //判断是否是文件夹
     78         //boolean flag=file.isDirectory();
     79         //是否是文件
     80         boolean flag=file.isFile();
     81         System.out.println(flag);
     82     }

          listFiles()方法介绍

     83     public static void method9(){
     84         File file=new File("X:\test");
     85         //获取此路径下所有的文件或文件夹的字符串名称
     86         String[] files=file.list();
     87         for(String s:files){
     88             File f1=new File(file,s);
     89             if(f1.getName().equals("a.txt")){
     90                 f1.delete();
     91             }
     92         }
     93     }
     94     public static void method10(){
     95         File file=new File("X:\test");
     96         File[] files=file.listFiles();
     97         for(File f:files){
     98             System.out.println(f);
     99         }
    100     }
    101 
    102 }

    注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件

    1,指定的目录必须是存在的,

    2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException

    文件过滤器:

     1 package com.oracle.io;
     2 
     3 import java.io.File;
     4 import java.io.FileFilter;
     5 
     6 public class MyFilter implements FileFilter{
     7 
     8 
     9     public boolean accept(File pathname) {
    10     /*    String name=pathname.getName().toLowerCase();
    11         boolean flag=name.endsWith(".java");*/
    12         return pathname.getName().toLowerCase().endsWith(".java");
    13     }
    14 
    15 }
    16 
    17 import java.io.File;
    18 
    19 public class Demo02 {
    20     public static void main(String[] args) {
    21         File file=new File("x:\test");
    22         File[] files=file.listFiles(new MyFilter());
    23         for(File f:files){
    24             System.out.println(f);
    25         }
    26     }
    27 }

    图解:

    文字解:

    有参:

    当listFile获取路径时,会调用accept方法,然后把路径传过去,运行accept方法,如果返回true,则存进

    File数组中,反之;如果返回false,就不存;最后遍历输出结果。

    无参:

     1 import java.io.File;
     2 
     3 //获取某目录下所有的文件
     4 public class Demo03 {
     5 
     6     public static void main(String[] args) {
     7         File file=new File("x:\test");
     8         getAllFile(file);
     9 
    10     }
    11     public static void getAllFile(File file){
    12         //获取该目录下的文件及文件夹
    13         File[] files=file.listFiles();
    14         //遍历
    15         for(File f:files){
    16             if(f.isDirectory()){
    17                 getAllFile(f);
    18             }else{
    19                 System.out.println(f);
    20             }
    21         }
    22     }
    23 }

    文解:

    创建一个File数组,调用无参方法;进行遍历,先进行判断,如果f是文件夹的话,则遍历到它的子目录,

    讲子目录下的文件存入数组,反之打印遍历到的所有文件。

     递归

    递归分为两种,直接递归和间接递归。

    直接递归称为方法自身调用自己。

    举例:

     1 public class Demo04 {
     2     //递归:要运行的方法主体不变,而参与运行的方法参数会变
     3     //递归必须要写一个程序出口,否则该程序没有意义
     4     public static void main(String[] args) {
     5         getNum(3);
     6     }
     7     //计算1-100的和,用递归做
     8     public static int getNum(int n){
     9         if(n==1){
    10             return 1;
    11         }
    12         return n+getNum(n-1);
    13     }
    14 
    15 }

    递归打印所有子目录中的文件路径

     1 public class YourFilter implements FileFilter{
     2 
     3     public boolean accept(File pathname) {
     4         //如果是文件夹,则不进行过滤,认为满足条件加到File数组中
     5         if(pathname.isDirectory()){ 判断是否是文件夹
     6             return true;  是则不过滤并存入数组
     7         }else{
     8             return pathname.getName().toLowerCase().endsWith(".java"); 反之打印带有.java后缀的文件
     9         }
    10     }
    11 
    12 }
     1 public class Demo05 {
     2 
     3     public static void main(String[] args) {
     4         File file=new File("x:\test");
     5         getAllFile(file);
     6 
     7     }
     8     public static void getAllFile(File file){
     9         File[] files=file.listFiles(new YourFilter());
    10         for(File f:files){
    11             if(f.isDirectory()){  判断是否是文件夹
    12                 getAllFile(f);  显示子目录存入数组
    13             }else{
    14                 System.out.println(f);  反之打印文件
    15             }
    16         }
    17     }
    18 
    19 }

    搜索指定目录中的.java文件(含子目录)

     1 public class FileDemo4 {
     2     public static void main(String[] args) {
     3         File file = new File("d:\test");
     4         getFileAll(file);
     5     }
     6     //获取指定目录以及子目录中的所有的文件
     7     public static void getFileAll(File file) {
     8         File[] files = file.listFiles(MyFileFilter());
     9         //遍历当前目录下的所有文件和文件夹
    10         for (File f : files) {
    11             //判断当前遍历到的是否为目录
    12             if(f.isDirectory()){
    13                 //是目录,继续获取这个目录下的所有文件和文件夹
    14                 getFileAll(f);
    15             }else{
    16                 //不是目录,说明当前f就是文件,那么就打印出来
    17                 System.out.println(f);
    18             }
    19         }
    20     }
    21 }
    22 
    23 //定义类实现文件名称FilenameFilter过滤器
    24 class MyFileFilter implements FilenameFilter{
    25     public boolean accept(File dir, String name) {
    26         return name.endsWith(".java");
    27     }
    28 }

    8.20总结:

    1.学习了IO流的概念;File类的构造函数以及获取的各种常用方法;

    学了文件及文件夹的创建与删除等常用方法;

    学了如何获取一个目录下的所有文件及文件夹的方法;

    2.学习了文件过滤器,通过实现接口调用accept方法进行过滤器文件名;

    3.学习了递归的概念;计算数的和以及打印所有子目录中的文件路径。

  • 相关阅读:
    java数组转list
    【转载】tomcat端口被占用问题完美解决方案!
    基于apicloud的英语课堂app设计与实现
    springboot整合mybatis(SSM开发环境搭建)
    POI Excel读取图片对应位置和顺序生成图片方法
    E: Sub-process /usr/bin/dpkg returned an error code (1) 出错解决方案
    Ubuntu 虚拟机无法关机的解决方案
    Celery 提示[ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 61] Connection refused.
    Python @classmethod&@staticmethod 区别
    SyntaxError: non-default argument follows default argument
  • 原文地址:https://www.cnblogs.com/2734156755z/p/9504215.html
Copyright © 2020-2023  润新知