IO流的一些总结


本文章谈谈我对IO的一些总结

IO流

主要概念: IO流用来处理设备之间的数据传输

File

IO流在输入输出时,都是基于File类进行操作,所以先了解一些什么是File。
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

创建方法:

常见构造方法:public File(String pathname)
mkdir() 在指定位置创建一个单级文件夹。
mkdirs() 在指定位置创建一个多级文件夹。请注意dir与dirs的区别
createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。
renameTo(File dest)如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名, 如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹。

删除方法:

delete() 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值。
deleteOnExit()jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。

判断方法:

exists() 文件或文件夹是否存在。
isFile() 是否是一个文件,如果不存在,则始终为false。
isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。
isAbsolute() 测试此抽象路径名是否为绝对路径名。
isDirectory() 是否是一个目录,如果不存在,则始终为false。

获取方法:

length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
getName() 获取文件或文件夹的名称,不包含上级路径。
getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified()获取最后一次被修改的时间。
getAbsolutePath()获取文件的绝对路径,与文件是否存在没关系

遍历方法:

public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
注意: list方法和listFiles方法遍历的是构造方法中给出的目录的路径,如不存在,则抛出空指针异常

IO流

IO中的I代表了 system.in
IO中的O代表了 system.out

根据数据的流向分为:输入流 和 输出流。
InputStream/Reader: 所有的输入流的基类
输入流 :把数据从其他设备上读取到内存中的流。
输出流 :把数据从内存中写出到其他设备上的流。

根据数据的类型分为:字节流 和 字符流。
OutputStream/Writer: 所有输出流的基类
字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流。

InputStream/Reader方法。

int read(); 从输入流中读取单个字节/字符,返回所读取的字节/字符数据
int read(byte[]/char[] arr)从输入流中最多读取b.length个字节/字符的数据,并将其存储在字节/字符数组arr中,返回实际读取的字节/字符数。
int read(byte[]/char[] arr,int off,int len); 从输入流中最多读取len个字节/字符的数据,并将其存储在数组arr中,放入数组arr中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节/字符数。
int available() 获取可读的字节数
void close() 关闭流, 释放资源

OutputStream和Writer方法

void write(int num); 将指定的字节/字符输出到输出流中,其中num即可以代表字节,也可以代表字符。
void write(byte[]/char[] arr); 将字节数组/字符数组中的数据输出到指定输出流中。
void write(byte[]/char[] arr, int off,int len ); 将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到输出流中。
void close() 关闭流, 释放资源

输入FileInputStream例子:

public  static void main(String[] args) {
      FileInputStream fis=null;
      try {
          fis=new FileInputStream("W//Demo_IO//aaa.txt");
          //创建字节输入流
          byte[] arr=new byte[1024];
           //创建一个长度为1024的数组 这里推荐使用1024倍数的大小数组
          int hasRead=0;
          //用于保存的实际字节数
          while((hasRead=fis.read(arr))>0){
            System.out.print(new String(arr,0,hasRead));
              //打印字符串进行输出
          }
      }catch (IOException e){
        e.printStackTrace();
      }finally {
          fis.close();
          //关闭流
      }
  }

输出FileOutputStream例子:

public  static void main(String[] args)throws IOException {
        FileInputStream fis=null;
        FileOutputStream fos=null;
        try {
            fis=new FileInputStream("W//Demo_IO//aaa.txt");
            //创建字节输入流
            fos=new FileOutputStream("W//Demo_IO//bbb.txt");
            //创建字节输出流
            byte[] arr=new byte[1024];
            int hasRead=0;
            while((hasRead=fis.read(b))>0){
                //写入文件读取的数据
                fos.write(arr,0,hasRead);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            fis.close();
            fos.close();
            //关闭流
        }
    }

缓冲流

BufferedInputStream

BufferedInputStream 是缓冲输入流。它继承于FilterInputStream。
BufferedInputStream自定义了一个内置数组,也就是缓冲区
从BufferedInputStream中读取数据时,会将该输入流的数据分批的填入到缓冲区中。每当数据被读完之后,输入流会再次填充缓冲区;如此反复,直到我们读完输入流数据位置。

BufferedOutputStream

BufferedOutputStream也自定义了一个内置数组,也就是缓冲区
程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中,直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里。

LineNumberReader

LineNumberReader是BufferedReader的子类, 和他BufferedReader相同的功能, 不同的是他可以统计行号

今天的文章就分享到这里,如有问题还请批评指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值