java 流详解_Java中的流详解

一、Java中流的原理

流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。

四种基本流InputStream,OutputStream,Reader,Writer又分别有更具体的子类,分为文件流,缓冲流,数据流,转换流,Print流,Object流等,都分别有特定的功能或用来操作特定的数据。

defb7a38fb92ba46bc91904112b95219.png

二、字节流

2.1 InputStream

继承自InputStream的流用于向程序中输入数据,且数据的单位是8bit。

09035c6cd3c8ff7d4315ba960d04a6b6.png

代码示例:

public static void main(String[] args) throws IOException{

File f=new File("f:\\a.txt");

if(f.exists()){

System.out.println("文件存在");

}else{

f.createNewFile();//用于创建文件

//f.setReadOnly();

System.out.println(f.getName()+"文件是否可读:"+f.canRead());

System.out.println(f.getName()+"文件是否可写:"+f.canWrite());

}

InputStream in=new FileInputStream(f);

int data=in.read();

while(data!=-1)

{

char e = (char)data;

System.out.print(e + "  ");

data = in.read();

}

}

代码示例:

File f=new File("f:\\a.txt");

if(f.exists()){

System.out.println("文件存在");

}else{

f.createNewFile();//用于创建文件

//f.setReadOnly();

System.out.println(f.getName()+"文件是否可读:"+f.canRead());

System.out.println(f.getName()+"文件是否可写:"+f.canWrite());

}

OutputStream out=new FileOutputStream(f);

String str="Hello world!";

byte[] b=str.getBytes();

out.write(b);

out.flush();

out.close();

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

write(byte[] b, int off, int len):将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

write(int b):将指定的字节写入此输出流,b为ascll码。

2.3、字节缓冲流

三、字符流

字节流和字符流的区别就是读取方式一个为按字节读取,一个是按字符读取。在读取文件想对文件内容进行处理,比如修改某一行的时候一般使用字符流,二仅仅是读取文件一般使用字节流。

3.1、Reader流和writer流

代码示例:

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class wr {

public static void main(String[] args) throws IOException{

File f=new File("f:\\a.txt");

if(f.exists()){

System.out.println("文件存在");

}else{

f.createNewFile();//用于创建文件

//f.setReadOnly();

System.out.println(f.getName()+"文件是否可读:"+f.canRead());

System.out.println(f.getName()+"文件是否可写:"+f.canWrite());

}

FileWriter fw  = new FileWriter(f);

String str="asdw";

fw.write(str);//向文件中写入asdw

fw.write(str,0,2);//向文件中写入as

char c='a';

fw.write(c);//向文件中写入a

fw.flush();//使用字符流必须要对缓存进行刷新才能向文件中写入内容

fw.close();//调用close()函数时自动对缓存进行刷新

//注意,OutputStream中还有append()方法可以对文件内容进行追加输出,详见Java API。

FileReader fr = new FileReader(f);

int b=0,num=0;

while((b = fr.read())!= -1){

System.out.print((char)b );

num++;

}

System.out.println("输出了"+num+"个字符!");

}

}

3.2 字符缓冲流

带有缓冲区的,缓冲区(Buffer)就是内存里面的一小块区域,读写数据时都是先把数据放到这块缓冲区域里面,最后对缓冲区内容统一操作,减少io对硬盘的访问次数,保护我们的硬盘。

-BufferedWriter bw = new BufferedWriteer(fw);

-BufferedReader br = new BufferedReader(fr);

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

public class Buffertry {

public static void main(String args[]){

try{

File f=new File("f:\\a.txt");

if(f.exists()){

System.out.println("文件存在");

}else{

f.createNewFile();//用于创建文件

//f.setReadOnly();

System.out.println(f.getName()+"文件是否可读:"+f.canRead());

System.out.println(f.getName()+"文件是否可写:"+f.canWrite());

}

BufferedWriter bw = new BufferedWriter(new FileWriter(f));

String s = null;

for(int i=0;i<100;i++){

s = String.valueOf(Math.random());//“Math.random()”将会生成一系列介于0~1之间的随机数。

bw.write(s);

bw.newLine();//调用newLine()方法使得每写入一个随机数就换行显示

}

bw.flush();//调用flush()方法清空缓冲区

BufferedReader br = new BufferedReader(new FileReader(f));

while((s = br.readLine())!=null){

//使用BufferedReader处理流里面提供String readLine()方法读取文件中的数据时是一行一行读取的

System.out.println(s);

}

bw.close();

br.close();

}catch(Exception e){

e.printStackTrace();

}

}

}

3.3、转换流

字节输入流转换为字符输入流:InputStreamReader是字节流转化为字符流的桥梁,它将字节去出并且按照指定方式解码为字符,构造方法为

InputStreamReader(InputStream in);//详见Java API

字节输出流转换为字符输出流:OutputStreamWriter继承自Writer,可以将指定写入流中的字符编码为字节

OutputStreamWriter(OutputStream out);//详见Java API

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class changetry {

public static void main(String[] args) throws IOException{

InputStreamReader isr=new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

System.out.println("请输入:");

String str=br.readLine();

System.out.println("输入内容:"+str);

}

}

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

File f=new File("f:\\a.txt");

FileOutputStream fos = new FileOutputStream(f);

OutputStreamWriter os = new OutputStreamWriter(fos);

BufferedWriter bos = new BufferedWriter(os);

bos.write("hahahaha");

bos.close();

os.close();

fos.close();

0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值