Java中的流分析
发布时间:2021-12-10 15:37:27 所属栏目:教程 来源:互联网
导读:一、Java中流的原理 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以流的方式进行。设备可以是文件,网络,内存等。 四种基本流InputStream,OutputStream,Reader,Writer又分别有更具体的子类,分为文件流,缓冲流
|
一、Java中流的原理 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。 四种基本流InputStream,OutputStream,Reader,Writer又分别有更具体的子类,分为文件流,缓冲流,数据流,转换流,Print流,Object流等,都分别有特定的功能或用来操作特定的数据。 二、字节流 2.1 InputStream 继承自InputStream的流用于向程序中输入数据,且数据的单位是8bit。 代码示例: 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(); ![]() (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



浙公网安备 33038102330459号