File与IO流

File

1.File类的概述和构造方法

file:是对文件和路径名的抽象表示

  • 文件和目录是可以通过File封装成对象的

  • 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。他可以是存在的,也可以是不存在的。将来要通过具体的操作把这个路径名转化为具体存在的

  • 方法名说明
    File(String pathname)通过给定的路径名字符串转化为抽象路径名来创建新的File实例
    File(String parent,String child)从父路径名字符串和子路径名字符串创建新的File实例
    File(File parent,String child)从父抽象路径名和子路径名字符串创建新的File实例
    • File f1=new File("E:/test/java.txt");
      System.out.println(f1);//输出 E:\test\java.txt
      
      File f2=new File("E:/test","java.txt");
      System.out.println(f2);//输出 E:\test\java.txt
      
      File f3=new File("E:/test");
      File f4=new File(f3,"java.txt");
      System.out.println(f4);//输出 E:\test\java.txt
      

2.File的创建功能

方法名说明
public boolean createNewFile()当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新文件
public boolean mkdir()创建由此抽象路径名命名的目录
public boolean mkdirs()创建由抽象路径名命名的目录,包括任何必须但不存在的父目录
  • File f1=new File("G:/test/java.txt");
    f1.createNewFile();
    
    File f2=new File("G:/test1");
    f2.mkdir();
    
    File f3=new File("G:/test2/test3");
    f3.mkdirs();
    
  • 如果目录或者文件开始就存在 则会返回false

3.File的判断和获取功能

方法名说明
public boolean isDirectory()测试此抽象路径名表示的File是否是目录
public boolean isFile()测试此抽象路径名表示的File是否是文件
public boolean exists()测试此抽象路劲名表示的File是否存在
public String getAbsolutePath()返回此抽象路径名的绝对路径名字符串
public String getPath()将此抽象路径名转化为路径名字符串
public String getName()返回此抽象路径名表示的文件或目录的名称
public String[] list()返回此抽象路径名表示的文件或目录的名称字符串数组
public File[] listFiles()返回此抽象路径名表示的文件或目录的File数组
File f1=new File("G:/test/java.txt");

System.out.println(f1.isDirectory());//flse
System.out.println(f1.isFile());//true
System.out.println(f1.exists());//true

System.out.println(f1.getAbsoluteFile());//G:\test\java.txt
System.out.println(f1.getPath());//G:\test\java.txt
System.out.println(f1.getName());//java.txt

File f2=new File("G:/test2");
String[] list1 = f2.list();
for (String str:list1) {
    System.out.println(str);
}//test3 test4

File[] files = f2.listFiles();
 for (File f:files) {
          System.out.println(f.getName());//test3 test4 test5.txt
        f(!f.isDirectory()){
              System.out.println(f.getName());//test5.txt
        }
}

##4.File删除

  • 方法名说明
    public boolean delete()删除此抽象路径名表示的文件或目录
  • File f3=new File("G:/test2");
    f3.delete();//true
    

IO流

  • 按照数据流向分
    输入流读数据
    输出流写数据
  • 按照数据类型分
    字节流字节输入流,字节输出流
    字符流字符输入流,字符输出流
  • 一般是按照数据类型来分

  • 如果数据通过Windows自带的记事本软件打开,我们还可以读懂里面的内容就使用字符流,否则使用字节流,如果你不知道使用哪种类型的流,就是用字节流

1.字节流

字节流抽象基类

  • InputStream:这个抽象类是字节输入流的所有类的超类
  • OutputSteam:这个抽象类是字节输出流的所有类的超类
  • 子类名的特点:子类名称都是以其父类名称作为子类名的后缀

字节输出流

  • 创建方法

  • 方法说明
    FileOutputStream(String name)创建文件输出流以指定的名称写入文件
    FileOutputStream(String name, boolean append)创建文件输出流以指定的名称写入文件,append 如果是true,则实现追加写入
  • 字节输出流写数据的步骤:

    • 创建字节输出流的对象,调用系统功能创建文件,创建字节输出流对象,让字节输出流指向文件
    • 调用字节输出流写数据的方法
    • 释放资源
  • 字节输出流写数据的方法

  • 方法说明
    void``write(int b)将指定的字节写入此文件输出流。
    void``write(byte[] b)b.length个字节从指定的字节数组写入此文件输出流。
    void``write(byte[] b, int off, int len)len字节从位于偏移量 off的指定字节数组写入此文件输出流。
  • FileOutputStream fos=new FileOutputStream("C:/IdeaProjects/TEST/fos.txt");
    
    int a=97;
    byte[] by1={'a','v','b'};
    byte[] by2={'1','2','3'};
    
    fos.write(a);//a
    fos.write(by2);//avb
    fos.write(by2,1,2);//23
    
    fos.close();
    

字节输入流

  • 构造方法:

  • 方法说明
    FileInputStream(String name)通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
  • 步骤:

    • 创建字节输入流对象
    • 调用字节输入流对象的读数据的方法
    • 释放资源
  • 读数据的方法:

  • 方法说明
    int``read()从该输入流读取一个字节的数据。
    int``read(byte[] b)从该输入流读取最多 b.length个字节的数据为字节数组。
    int``read(byte[] b, int off, int len)从该输入流读取最多 len字节的数据为字节数组
    int``available()返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞
  • FileInputStream fis = new FileInputStream("C:/IdeaProjects/TEST/fos.txt");
    FileOutputStream fos = new FileOutputStream("C:/IdeaProjects/TEST/fis.txt");
    
    int len=fis.available();
    System.out.println(len);
    
    byte [] by=new byte[len];
    fis.read(by);
    
    fos.write(by);
    
    fis.close();
    fos.close();
    

字节缓冲流

字节缓冲输出流
  • BufferedOutputStream 是OutputStream的子类

  • 该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。

  • 构造方法:

  • 方法说明
    BufferedOutputStream(OutputStream out)创建一个 BufferedOutputStream并保存其参数,输出流out ,供以后使用。
字节缓冲输入流
  • BufferedInputStream 是InputStream的子类

  • 将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节

  • 构造方法:

  • 方法说明
    BufferedInputStream(InputStream out)创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。

2.字符流

  • 由于字节流处理中文不是很方便,所以java提供字符流

  • 字符流=字节流+编码表

  • 中文在存储时,无论选择哪种编码(UTF-8,GBK)第一个字节都是负数

编码表

  • 计算机上存储的信息都是用二进制存储

  • 按照某种规则,将字符存储到计算机中,称为编码,反之,将存储在计算机中的二进制按照某种规则解析出来,成为解码。按照A编码存储,就必须用A编码解析,否则会出现乱码的现象

  • 字符集:是一个系统支持的所有的字符的集合,包括国家文字、标点符号、五星符号、数字等,比如ASCII字符集、GBXXX字符集、Unicode字符集

  • 方法说明
    编码:
    byte[] getBytes()使用平台默认的字符集将该String编码为一系列字节,将结果存储到新的字节数组中
    byte [] getBytes(String charseName)使用指定的字符集将该String编码为一系列字节,将结果存储到指定的字节数组中
    解码:
    String(byte[] bytes)通过平台的默认字符集解码指定的字符数组来构造新的String
    String(byte[] bytes,String charsetName)通过指定的字符集解码指定的字符数组来构造新的String

字符输入流Reader

  • 子类InputStreamReader 来实现Reader

  • InputStreamReader 是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

  • 构造方法

  • 方法说明
    InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader。
  • 常用方法:

  • 方法说明
    void``flush()刷新流。
    void``write(int c)写一个字符
    void``write(String str, int off, int len)写一个字符串的一部分。
    void``write(char[] cbuf, int off, int len)写入字符数组的一部分。
  • InputStreamReader ir=new InputStreamReader(new FileInputStream("C:/IdeaProjects/TEST/fos.txt"));
    char[] ch=new char[1024];
    int b;
    ir.read(ch);
    System.out.println(ch);
    ow.close();
    ir.close();
    

字符输出流Writer

  • 子类OutputStreamWriter来实现Writer

  • 构造方法:

  • 方法说明
    OutputStreamWriter(OutputStream out)创建一个使用默认字符编码的OutputStreamWriter。
  • 常用方法

  • 方法说明
    int``read()读一个字符
    int``read(char[] cbuf, int offset, int length)将字符读入数组的一部分。
  • OutputStreamWriter ow=new OutputStreamWriter(new FileOutputStream("C:/IdeaProjects/TEST/fos.txt"));
    String str="你好中国";
    char[] by={'爪','哇'};
    ow.write(str);
    ow.write(by);
    ow.close();
    
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值