IO流完美诠释,你要的我都有

1.前言

IO流的实际使用场景是很多的,例如文件的上传下载,传输,设计模式…都会涉及到IO流。
在使用IO流的时候我们要明确
1)是操作的数据是数据源还是目的(也就是要读还是要写)
2)操作的设备上的是字节还是文本
3)考虑是否需要额外的功能(转换流,高效流等)

2.File类

IO流也就是输入输出流,从文件开始到文件结束,都离不开文件,所以我们先从File类开始整理(文件)
java.io.File 类是专门针对文件进行操作的类,不过file类只能对文件本身进行操作,不能对文件内容做修改,主要应用在对文件和目录的查找,创建与删除功能中
java.io.File类是文件与目录抽象路径名的表示
总结:
file与流无关,不能对文件进行读入和写出,
就是操作文件(D:\文件目录1\文件.txt)与目录(D:\文件目录)的类

2.1构造方法

在java中万物皆对象,File类也不例外,说到对象那么不的不了解的就是对象的构造方法
记录三种最常用的File构造方法
1)。public File(String pathname) :通过将给定的路径名 字符串转化为抽象路径名来创建新的File实例
2)public File(String parent,String child):通过父路径名 字符串与子路径名 字符串来创建新的File实例
3)public File(File parent,String child): 通过通过父抽象路径名与子路径名 字符串创建新的File实例
接下来我们来看一段代码:

//1.一个File对象代表一个硬盘中实际存在的文件或是目录
//2.而File类的构造方法不会去检验文件或是目录是否真实存在,所以,该路径下是否存在目录或是文件,都不会影响File对象的创建

//文件路径名
String pathName="D:\\abc.txt";
File file=new File(pathName);
//文件路径名
Stirng PathName2="D:\\1\\def.txt";
File file=new File(pathName2);

//通过父路径与子路径名字符串来创建File实例
String parent="D:\\bbb";
String child="aaa.txt";
File file=new File( parent,child);//------相当于D:\\bbb\\aaa.txt
//通过父级File对象与子路径名 字符串创建新的File实例
File parent1=new File("D:\\bbb");
String child2="aaa.txt";
File file=new File(parent1,chaild2);//----相当与D:\\bbb\\aaa.txt

总结:File类的注意点:
1):一个File对象代表一个实际存在与硬盘中的文件或是目录
2):File类的构造方法不会检测文件或是目录是否存在,也就是说该路径下是否存在文件或是目录都不会影响File对象的创建

2.2File类的常用方法

2.2.1 File类获取某些功能的方法
1)public String getAbsolutePath():获取该File对象的绝对路径名字符串
2)public String getName();获取该File对象表示的文件或是路径的名字
3)public Long length();返回此File表示的文件的长度

以上方法测试,测试代码如下:

//getAbsolutePath();获取文件的绝对路径名 字符串
//getName();获取File代表的文件或目录的名字
//length();获取文件或是目录的长度
public class TestIoMethod{
     public static void main(String[] agr){
         //模拟创建一个File实例(你们以自己的磁盘文件为实际)
         File file=new file("D:\\bbb\\aaa.txt");
         System.out.println("文件的绝对路径名字符串:"+file.getAbsolutePath());
         System.out.println("File对象代表的文件的名字"+file.getName());
         System.out.println("File对象代表的文件的长度"+file.length());
   //控制台打印结果如下:
   /*文件的绝对路径名字符串:D:\bbb\aaa.txt
   *File对象代表的文件的名字:aaa.txt
   *File对象代表的文件的长度:0
   */
   }
}

2.2.2 绝对路径和相对路径
1)绝对路径:是指以盘符开头的完整路径(D:\aaa\bbb.txt)
2) 相对路径:一个简化的路径,不已盘符开头(\bbb.txt)
注意点:
1)路径名不区分大小写,
2)路径中的文件名称分隔符windows使用的是反斜杠,反斜杠是转义字符,两个反斜杠就代表一个普通的反斜杠
2.2.3 判断某些功能的方法
1)public boolean exists();判断此File对象标识的文件或目录是否真实存在,存在返回true,不存在返回false
2)public boolean isDirectory();判断此File表示的是否为目录
3)public boolean isFile();判断此File表示的是否为文件
测试代码如下

public class TestIoMethod{
/** 这个类用来测试File中的常用的判断方法 */
      public static viod main(String[] arg){
         //创建一个盘符中实际存在的文件或是目录的实例对象
        File file=new File("D:aaa.txt");
        //测试以上的判断方法
        System.out.println("该File对象表示的文件或是目录是否存在"+file.exists());
        System.ourt.println("该File对象表示的是目录"+file.isDirectory());
        System.out.println("该File对象表示的是文件"+file.isFile());
        //控制台的输出结果为:
        //true
        //false
        //true
     }
}

2.2.4 创建文件与删除文件的功能
1)public boolean createNewFile();文件不存在,创建一个新文件并返回true,如果文件存在直接返回false
2)public boolean delete();删除由此File表示的文件或目录
3)public boolean mkdirs();创建由此File表示的目录,包括任何必需但不存在的父目录。
注意:还有一个mkdir()方法但是只能创建一级目录。所以在开发中以重会使用mkdirs()方法,可以创建多级目录(\s\d\s),
演示代码如下:

public class TestCD{
/** 这个类用来测试文件或目录File的创建与删除 */
   public static void main(String[] arg){
      //文件的创建与删除
      File file =new File("D:\\aaa.txt");
      System.out.println("文件是否存在"+f.exists());
      System.out.println("创建文件"+f.createNewFile());
      System.out.println("创建文件"+f.createNewFile());
      System.out.println("文件是否存在"+f.exists());
      System.out.println("删除文件"+f.delete());
      //控制台结果演示
      //false;
      //true;
      //false;
      //true
      //true;
      
      //目录的创建与删除
      File f=new File("D:\\bbb");
      File f1=new File("D:\\bbb\\aaa");
      System.out.println("目录是否存在"+f.exists());
      System.out.println("创建目录"+f.mkdir());
      System.out.println("创建多级目录"+f1.mkdirs());
      System.ouot.println("删除目录"+f.delete());
      //控制台演示结果
      //false;
      //true;
      //true;
      //true;      
   }
}

总结:
1)createNewFile()方法只能用来创建文件,不能创建目录
2)delete()删除方法能删文件,也能删除目录。但是能删除的目录必须是没有文件存在的目录
3)mkdir()只能创建一级目录 而 mkdirs()可以创建多级目录
2.2.5 目录的遍历
1)public String[] list();返回一个字符串数组,表示该File对象表示的目录中的所有子文件或是目录的名字
2)public File[] listFiles();返回一个File对象的数组,表示当前目录下的文件以及文件夹(目录)的对象,只要拿到了文件对象,就可以进行更多的操作,
测试代码如下

public class TestIo{
    /** 这个类用来测试目录的遍历 */
    public static void main(String[] age){
       //创建一个File对象(磁盘实际存在的文件夹)
       File f=new File("D:\\aaa");
       //第一种遍历.返回当前目录下所有的子文件或是文件夹
       String[] names=f.list();
       for(String name:names){
           System.out.println(name);//打印的是文件或目录的名字
       }
      //第二种遍历,返回当前目录下的子文件或是目录的对象
      File[] f1=f.listFiles();
      for(File f2:f1){
        Systrm.out.println(f2);//返回当前的目录下的文件或是目录的对象,直接打印显示的是文件或目录的全路径
      }
   }
}

总结:
1)在使用这种方法的时候。必须保证所指定的目录真实存在,
2)指定的必须是目录,不然会引发空指针异常(NullPointerException)
2.2.6 递归遍历文件夹中所有的文件
演示代码如下:

public class TestRecursion{
/** 这个类用来测试递归遍历文件夹所有的文件  */
    public static void main(String[] arg){
       //获取文件夹对象,保证文件夹真实存在
        File file=new File("D:\\aaa");
        Recursion(file);
    }
    public static void Recursion(File file){
        //如果传入的不是目录就直接退出
        if(!file.isDirectory){
            return;
     }
       //保证传入的是目录。获取对象
       File[] files= file.listFiles();
       //遍历
       for(File f:files){
            if(f.isDirectory){
            //递归
            Recursion(f);
         }else{
         //打印文件名字
           System.out.println(f.getName());
         }
      }
   }
}

好了童鞋们!关于File类的知识点我们就先总结到这里,关于IO流的正式认知我们会在这一篇文章中开整!再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值