IO流操作

# IO流

I:input输入(读取)把硬盘中的数据读取到内存中使用。

O:output输出(写入)把内存中的数据写入硬盘中保存。

数据流(字符、字节),1个字符=2个字节  1个字节=8个二进制位

## java.io.OutputStream:字节输出流

此类是表示输出字节流的所有类的超类。

其中定义了一些子类共性的成员方法:    

```java
public void close();//关闭此输出流并释放与此流相关联的任何系统资源。
public void flush();//刷新此输出流并强制任何缓冲的输出字节被写出。
public void write(byte[] b);//将b.length字节从指定的字节数组写入此输出流。
public abstract void write(int b);// 将指定的字节输出流。
```

java.io.FileOutputStream  extends  OutputStream

FileOutputStream;文件字节输出流

作用:把内存中的数据写入到硬盘文的件中

## 构造方法:

​    

```java
    FileOutputStream(String  name); //创建一个向具有指定名称的文件中写入数据的输出文件流。

    FileOutputStream(File  file); //创建一个向指定File对象表示的文件中写入数据的文件输入流。
```

​        参数:写入文件的目的地

​                String  name:目的地是一个文件的路径;

​                File  file:目的地是一个文件。

## 构造方法的作用:

​        1、创建一个FileOutputStream对象;

​        2、会根据构造方法中传递的文件/文件路径,创建一个空的文件;

​        3、会把FileOutputStream对象指向创建好的文件。

## 写入数据的原理(内存-->硬盘)

​            java程序-->JVM(java虚拟机)-->OS(操作系统)-->OS调用写数据的方法-->把数据写入到文件中

## 字节流输出的使用步骤(重点):

​            1、创建一个FileOutputStream对象,构造方法中传递写入数据的目的;

​            2、调用FileOutputStream对象中的方法write,把数据写入到文件中;

​            3、释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提高程序的效率)。

## 一次写多个字节的方法

​        public  void  write(byte[]  b);将b.length字节从指定的字节数组写入此输出流。

​                    如果写的第一个字节是正整数(0-127),那么显示的时候会查询ASCII表。

​                    如果写的第一个字节是负数,那第一个字节会和第二个字节,两个字节组成中文显示,查询系统默认码表(GBK)。

​        public  void  write(byte[]  b,int  off,int  len);从指定的字节数组写入len字节,从偏移量off开始输出到此输出流。

​                    把字节数组的一部分写入到文件。

​                    int  off:数组开始索引;

​                    int  len:写几个字节。

## 写入字符的方法

可以使用String类中的方法把字符串转换为字节数组。

​        byte[]  getBytes();  把字符串转换为字节数组

------------------------------

-------------------------------

## java.io.InputStream :字节输入流

此抽象类是表示输入字节流的所有类的超类。

其中定义了所有子类共性的方法:

```java
int read();//从输入流中读取数据的下一个字节。
int read(byte[] b);//从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
void close();//关闭输入流并释放与该流关联的所有系统资源。
```

java.io.FilteInputStream  extends  InputStream

FileInputStream:文件字节输入流。

作用:把硬盘文件中的数据,读取到内存中使用。

## 构造方法:

```java
FileInputStream(String  name);

FileInputStream(File  file);
```

参数:读取文件的数据源

​        String  name:文件的路径;

​        File  file:文件。

## 构造方法的作用:

​        1、会创建一个FileInputStream对象;

​        2、会把FileInputStream对象指定构造方法中药读取的文件。

---------------------------------

# 字符流

使用字节流读取中文文件:

1个中文:

​        GBK:占用两个字节;

​        UTF-8:占用三个字节。

## 字符输入流【Reader】

java.io.Reader抽象类是表示用于读取文件字符流的所有类的超类。

作用:读取字符信息到内存中。

java.io.Reader中共性的成员方法:

```java
int read();//读取单个字符并返回。
int    read(char[] cbuf);//一次读取多个字符,将字符读入数组。
void close();//关闭该流并释放与之关联的所有资源。
```

java.io.FilterReader  extends  InputStreamReader  extends  Reader

FileReader:文件字符输入流。

作用:把硬盘文件中的数据以字符的方式读取到内存中。

## 构造方法:

```java
FileReader(String fileName);
FlieReader(File file);
```

参数:读取文件的数据源

​        String  fileName:文件路径;

​        File  file:一个文件。

FileReader构造方法的作用:

​        1、创建一个FileReader对象;

​        2、会把FileReader对象指向要读取的文件。

字符输入流的使用步骤:

​        1、创建FlieReader对象,构造方法中绑定要读取的数据源;

​        2、使用FileReader对象中的方法read读取文件;

​        3、释放资源。

## 字符输出流【Writer】

java.io.Writer:字符输出流,是所有字符输出流最顶层的父类,是一个抽象类

共性的成员方法:

```
void writer(int c);//写入一个字符。
void write(char[] cbuf);//写入字符数组。
abstract void write(char[] cbuf,int off,int len);//写入字符数组的某一部分,off数组的开始索引,len的字符个数。
void write(String str);//写入字符串。
void write(String str,int off,int len);//写入字符串的某一部分,off字符串的开始索引,len写入的字符个数。
void flush();//刷新该流的缓冲。
void close();//关闭此流,但要先刷新它。
```

## 集合中的方法:Properties

​        public  class  Properties  extends Hashtable<Object,object>

使用Property对象来存储数据

它是一个双列的集合,它的key和value都是字符串

```java
public String getProperty(String key);//通过key可以获取集合中的value。
public Object setProperty(String key,String value);//向集合当中添加值。
public Ste<String> stringPropertyNames;//从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串,包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。
```

使用Property对象的带有流功能的方法:将集合中的临时数据,写入到磁盘中

```java
public void store(OutputStream out,String comments);
public void store(Writer weiter,String comments);
```

==comments:注释  用来解释说明保存的文件是用来干什么的,不能使用中文,会产生乱码,一般使用“”空字符串。==

使用步骤:

​        1、创建集合对象,给集合添加数据;

​        2、创建一个字节输出流/字符输出流,构造方法中绑定输出的位置;

​        3.、使用集合对象的store方法,把集合中的数据存储到硬盘中;

​        4、释放资源。

使用Properties对象读取数据到集合中

使用方法:

```java
public void load(InputStream inStream);//字节流读取,不能读取中文。
public void load(Reader reader);//字符流的形式读取,可以读取到中文字符。
```

使用步骤:

​        1、创建对象;

​        2、使用集合中的load方法读取文件;

​        3、遍历集合。

### 续写和换行

续写,追加写:使用两个参数的构造方法
FiLeWriter(string fiLeName, boolean append)
FiLewriter(File file, boolean append)
参数
String fileName, File file:写入数据的目的地
booLean append:续写开关true:不会创建新的文件覆盖源文件,可以续写; false:创建新的文件覆盖源文件
换行:换行符号
windows:\r\n
Linux: /n
mac: /r

## 高级流:

### 缓冲流:

也称为高效流,它是四个基本Filexxx流的增强

按照数据类型分类:

​        字节缓冲流:BufferedInputStream,BufferedOutputStream

​        字符缓冲流:BufferedReader,BufferedWriter

缓冲流的原理:在创建对象的时候,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。

#### 缓冲字节输出流:

public class BufferedOutputstream extends FilterOutputstream  ----->Outputstream  :该类实现缓冲输出流
构造方法:

```java
pubLic Bufferedoutputstream( Outputstream out);//创建一个新的缓冲输出流,捋数据写入到指定的底层输出流
pubLic Bufferedoutputstream( Outputstream out, int size);//创建一个新的缓冲输出流,将具有指定缓冲区大小的数据写人到指定的底层
```

输出流
size:可以指定大小,也可以不指定
使用步骤
        1、创F1Le0 utputstream对象·构造方法中绑定要输出的目的;

​        2、创建BufferedOutputStream对象,构造方法中传递FileOutputStream对象,提高FileOutputStream效率;

​        3、使用BufferedOutputStream对象中的write方法,把数据写入内部缓冲区中;

​        4、使用BufferedOutputStream对象中的flush方法,将数据刷新到文件中;

​        5、关闭资源(第4步可省略)。

#### 缓冲字节输入流:

public class BufferedInputstream extends FilterInputstream  ----->Inputstream  :该类实现缓冲输入流

构造方法:

```java
pubLIc BufferedInputstream( Inputstream in);//创建一个 Buffe对象并保存参数,既in,用来将来使用
public BufferedInputstream(Inputstream in, int size);
```

使用步骤:
参看 Bufferedoutputstream。

#### 字符缓冲输出流:

public class Bufferedwriter extends Writer:
字符缓冲输出流
构造方法:

```java
public BufferedWriter(Writer out, int sz);
public BufferedWriter(Writer out);
```

实现步骤:
参看前面。

#### 缓冲字符输入流:

缓冲字符输入流

public class BufferedReader extends Reader

```java
pubLic BufferedReader( Reader in);//创建使用默认大小的输人缓冲区的缓冲字符输入流
public BufferedReader( Reader in, int sz);//创建使用指定大小的输人缓冲区的缓冲字符输人流
```

### 特有方法:

public String readLine():读一行文字。一行被视为由换行符(n),回车符("1r)中的任意一个
紧跟换行符的回车符或通过到达文件末尾终止
回值为 String:如果读到文件末尾返回nuLL

使用步骤:

​        1、创建一个字符输入对象;

​        2、创建一个缓冲字节输入流对象;

​        3、释放资源。

---------------------------------------

### objectoutputstream:

publIc class objectoutputstream extends outputstream
作用:把对象以流的方式序列化到文件中进行保存
构造方法:
public Objectoutputstream (Outputstream out)
特殊的成员方法:
pubLic finat void writeobject(0 bject ob]):将指定的对象写入到 objectoutputstream
使用步骤
1.创建0 bjectoutputstream对象,构造方法中传递字节输出流
2.使用对象的Wite0 bject方法·将对象输出到文件中
3.釋放资源
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值