IO流

本文详细介绍了Java中IO流的基本操作,包括字节流的文件读写、FileInputStream和FileOutputStream的应用,以及字符流(FileReader和FileWriter)的使用,涵盖了流复制、缓冲流和转换流等内容。

**

IO流的基本操作

1.字节流读文件

注意:要抛出异常否则回报错

字节流读写文件
  InputStream是字节输入流的顶级抽象父类,不能被实例化,所以要用InputStream的子类
  针对文件的读写,一般用FileInputStream和FileOutStream
  1.创建fileInputStream对象并往对象输入需要读取的文件路径
  2.调用fileInputStream的read()方法,该方法返回 0-255 的值(其实就是字符对应的ASCII值),返回-1表示结束,
  注意:read()每次只能返回一个值,所以要用循环
  3.关闭资源

``
FileInputStream fileInputStream = new FileInputStream(“f:/s.txt”);
int t=0;
while ((t=fileInputStream.read())!=-1){ //-1表示文件读取完毕
System.out.println(t);
}
fileInputStream.close();


### 1.2read(byte[] b)方法的使用

read(byte[] b)方法比read()方法效率更快。
通过定义一个数组,把字节装进数组后在运输,比一次运输一个字节强
该函数返回的int表示读取的长度,返回-1表示读取完毕
然后用String函数输出文件的内容


FileInputStream fileInputStream = new FileInputStream(“f:/s.txt”); //文件要存在不然会有问题
byte[] bytes = new byte[1024];
int len=0;
while((len=fileInputStream.read(bytes))!=-1)
{
String str=new String(bytes);//字节数组转化成字符串
System.out.println(str);
}
fileInputStream.close();


## 2.字节流写文件

#### 2.1FileOutputStream

FileOutputStream对象会自动创建文件,通过write()方法写入数据,如果文件已经存在就会覆盖原来的数据
解决方法在FileOutputStream的构造函数中加一个true如
FileOutputStream(“f:/s.txt”,true);


FileOutputStream outputStream=new FileOutputStream(“f:/s.txt”); //会自动创建文件
FileOutputStream utputStream=new FileOutputStream(“f:/s.txt”,true);//不会覆盖原来文件的数据,新增加的数据会在原数据的基础上添加
String str=“我是你爸爸!”;
byte[] b=str.getBytes();//因为一次只能写入一个字节,所以要循环
for(int i=0;i<b.length;i++){
outputStream.write(b[i]);
}
outputStream.close();//关闭资源


注意:OutputStream的是FileOutputStream的顶级抽象父类,且write()方法有好几种,可百度

## 3.文件的复制:

思路:

1.创建输入流对象
2.创建输出流对象
3.把输入流读到的数据写入输出流

FileInputStream fileInputStream = new FileInputStream(“f:/s.txt”);//要读取的文件的路径
FileOutputStream fileOutputStream=new FileOutputStream(“f:/ss.txt”);//要复制到哪个文件的路径
byte[] bytes = new byte[1024];
int len=0;
while((len=fileInputStream.read(bytes))!=-1) //读取完毕会跳出循环
{
fileOutputStream.write(bytes,0,len);
String str=new String(bytes);
System.out.println(str);
}
fileInputStream.close();
fileOutputStream.close();


## 4.字符流操作文件

- Reader是字符输入流顶级抽象父类,用于读取字符
- Writer是字符输出流顶级抽象父类,用于写入字符
- FileReader和FileWriter分别是Reader,Writerd的子类,一般用这两个类来实现文件的读写

### 4.1FileReade

> FileReader fileReader = new FileReader("f:/s.txt");
>
> int ch=0;
>
> while ((ch=fileReader.read())!=-1){ 
>
>   System.out.println((char)ch);
>
>   //因为字符流的read()返回的是int类型使用类型转化为char类型
>
> }
>
> fileReader.close();        

### 4.2FileWriter

//FileWriter writer = new FileWriter(“f:/a.txt”); //f:\a.txt也行
FileWriter writer1 = new FileWriter(“f:/a.txt”,true); //f:\a.txt也行
String str=“我是你大爷!!!”;
writer1.write(str);
//writer.close();
writer1.close();


### 4.3缓冲流



FileReader fileReader = new FileReader(“f:/s.txt”);
BufferedReader reader=new BufferedReader(fileReader);//字符输入缓冲流
FileWriter writer = new FileWriter(“f:/a.txt”);
BufferedWriter b=new BufferedWriter(writer); //字符输出缓冲流
String str;
while ((str=reader.readLine())!=null)
{
b.write(str);
//b.newLine();
}
reader.close();
b.close();


### 4.4转换流

​                        <u>InputStreamReader:</u>将字节输入流转换为字符输入流

​                        <u>OutputStreamWriter:</u>Writer的子类,将一个字节输出流转换为字符输出流

FileInputStream in=new FileInputStream(“f:/a.txt”);
InputStreamReader inr=new InputStreamReader(in); //转换
BufferedReader br=new BufferedReader(inr); //字符流缓冲区
FileOutputStream out=new FileOutputStream(“f:/s.txt”);
OutputStreamWriter outw=new OutputStreamWriter(out);
BufferedWriter bw=new BufferedWriter(outw);
String str;
while((str=br.readLine()) != null){
bw.write(str);

}
br.close();
bw.close();




​                         

​                         




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值