Java-IO编程(一)

I/O编程

1.文件操作

1.1File类的使用

  • 创建/删除/存在
new File.crateFile()/.delete()./exist()

注意!:每个文件系统对文件的分隔符不同,因此可以使用file类中的

File.separator #自动获得路径分隔符
  • 获取文件的元信息
File.listFiles() #列出目录中的全部文件信息

1.2字节流和字符流

  1. 字节流:OutputStream(写),inputStream(读)
  2. 字符流:Reader,Wirter

文件操作步骤

  1. 读取文件
  2. 对字节流或者字符流实例化
  3. 执行读/写
  4. 关闭所有的流
1.2.1 OutputStream

OutputStream的继承关系图

在这里插入图片描述

从这个继承关系图可以看出OutputStram是一个抽象类,所以需要使用字节输出流的时候,一般都是用他的子类FileOutputStream

构造方法

FileOutputStream(File file)创建一个文件输出流写入指定的 File对象表示的文件。
FileOutputStream(File file, boolean append)创建一个文件输出流写入指定的 File对象表示的文件。
FileOutputStream(String name)创建一个文件输出流,用指定的名称写入文件。
FileOutputStream(String name, boolean append)创建一个文件输出流,用指定的名称写入文件,参用追加或者覆盖的方式

方法

close()关闭此文件输出流并释放与此流关联的任何系统资源。
write(byte[] b)b.length字节从指定的字节数组来此文件输出流。
write(byte[] b, int off, int len)len字节指定字节数组中的起始偏移 off此文件输出流。
write(int b)将指定的字节写入该文件输出流中。

提示

使用AutoCloseable自动关闭接口

由于OutputStream是AutoCloseable的子类,所以可以使用try-catch来实现自动关闭

try{
       File file = new File("");
       FileOutputStream fileOutputStream = new FileOutputStream(file);
       String str = "Hello";
       fileOutputStream.write(str.getBytes());
   }catch (Exception e){
        e.printStackTrace();
}
1.2.2InputStream

InputStream的继承关系图

在这里插入图片描述

方法

close()关闭此文件输入流并释放与流关联的任何系统资源。
read()从这个输入流读取一个字节的数据。
read(byte[] b)读到 b.length从输入流到字节数组数据字节。
read(byte[] b, int off, int len)读到 len从输入流到字节数组数据字节。
skip(long n)跳过并丢弃 n字节输入流中的数据。

从这个继承关系图可以看出InputStram是一个抽象类,所以需要使用字节输出流的时候,一般都是用他的子类FileInputStream

测试

File file = new File("");
FileInputStream fileInputStream = new FileInputStream(file);
byte[] data = new byte[1024];
int len = fileInputStream.read(data);
//字节转成字符串
System.out.println(new String(data,0,len));

可以一步读完这个文件的所有数组data防止数据越界

InputStream input = new FileInputStream(file);
input.readAllBytes();
1.2.3 Writer

Writer的继承关系图

在这里插入图片描述

方法

append(char c)追加输出内容
close()关闭流,冲洗它
flush()冲流缓冲区
write(char[] cbuf)写一个字符数组。
write(char[] cbuf, int off, int len)写入一个字符数组的一部分。
write(int c)写一个字符。
write(String str)写一个字符串。
write(String str, int off, int len)写入字符串的一部分。
1.2.4 Reader

Reader的继承关系图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9QvZVrDf-1615206649665)(C:\Users\xiaobai\AppData\Roaming\Typora\typora-user-images\image-20210308193417463.png)]

方法

skip(long n)跳过的字符。
read()读取单个字符。
close()关闭流并释放与它相关联的任何系统资源。
mark(int readAheadLimit)标记流中的当前位置。
read(char[] cbuf)将字符读入一个数组。
read(char[] cbuf, int off, int len)将字符读入一个数组的一部分。
read(CharBuffer target)试图将字符读入指定的字符缓冲区中。
1.2.5字节流和字符流的区别

虽然在java.io包内都存在字符流和字节流,但是在数据传输(或者将数据存储在磁盘的时候),字节流数据能直接存在磁盘中,而字符流数据需要先暂存到缓冲区中,然后通过FLushable接口中提供的flush()方法,将数据强制刷新缓冲区的数据,才会有内容输出,否则不会有内容输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NrNAQn6I-1615206649668)(C:\Users\xiaobai\AppData\Roaming\Typora\typora-user-images\image-20210308202639464.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值