Java学习之I/O中的其他功能流

来源:互联网 发布:中兴毛网络e灯正常亮吗 编辑:程序博客网 时间:2024/06/07 18:23

一、LineNumberReader:跟踪行号的缓冲字符输入流

public int getLineNumber():获取行号

public void setLineNumber(int lineNumber):设置起始行号

String readLine():读取一行

package com.edu.linenumerreader;import java.io.FileReader;import java.io.IOException;import java.io.LineNumberReader;public class Demo {public static void main(String[] args) throws IOException {//创建对象LineNumberReader(Reader in) //LineNumberReader lnr = new LineNumberReader(new FileReader("test.txt"));//创建对象并设置缓冲区大小LineNumberReader(Reader in, int sz) LineNumberReader lnr = new LineNumberReader(new FileReader("test.txt"),1024);//public void setLineNumber(int lineNumber):设置起始行号lnr.setLineNumber(20);//遍历String line;while ((line=lnr.readLine())!=null) {//读物每行数据System.out.println(lnr.getLineNumber()+":"+line);//输出行号和数据}//关闭流lnr.close();}}
21:#Tue May 09 16:45:21 CST 201722:zhangsan=2023:lisi=10024:wangwu=80

二、操作基本数据类型的流

可以操作基本类型的流对象。

DataInputStream:读数据

DataOutputStream:写数据

 注意: 读写顺序必须一致,否则数据有问题。

package com.edu.data;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class DataInputStreamDemo {public static void main(String[] args) throws IOException {//写数据DataOutputStream dos = new DataOutputStream(new FileOutputStream("fos.txt"));dos.write('h');dos.writeInt(20);dos.writeFloat(3.34f);dos.writeChar('f');//读数据DataInputStream dis = new DataInputStream(new FileInputStream("fos.txt"));System.out.println(dis.read());System.out.println(dis.readInt());System.out.println(dis.readFloat());System.out.println(dis.readChar());dos.close();dis.close();}}

三、内存操作流:解决临时数据存储的问题。

 操作字节数组

 ByteArrayInputStream

 ByteArrayOutputStream

 byte[] toByteArray() 将之前写入内存的流转换成字节数组

 操作字符数组

 CharArrayReader

 CharArrayWrite

 操作字符串

 StringReader

 StringWriter

package com.edu_01;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;public class ByteArrayInputStreamDemo {public static void main(String[] args) throws IOException {//创建给内存写数据的对象ByteArrayOutputStream byos = new ByteArrayOutputStream();//写数据:write(byte[] b, int off, int len) byos.write("hello".getBytes());//将数据转换成字节数组byte[] bys = byos.toByteArray();//创建从内存中读数据的对象:ByteArrayInputStream(byte[] buf) //由于写入数据的时候构造方法需要的参数是字节数组。所以要是用toByteArray()进行转换ByteArrayInputStream bais = new ByteArrayInputStream(bys);//读数据int i;while ((i=bais.read())!=-1) {System.out.println((char)i);}byos.close();bais.close();}}

四、打印流

1、分类
字节打印流:PrintStream
字符打印流:PrintWriter
2、特点
(1)只能操作目的地,不能操作数据源
(2)可以操作任意类型的数据
(3)如果启动了自动刷新,能够自动刷新
(4)可以操作文件的流
直接操作文件的流指的是其构造方法同时又File和String类型的参数
3、如何实现自动刷新
(1)使用用自动刷新的构造方法

PrintWriter(OutputStream out, boolean autoFlush) 

PrintWriter(Writer out, boolean autoFlush) 

(2)当启用类自动刷新的构造方法后,只有在调用println()printf(),format()这些方法的时候才能实现自动刷新,其中使用println方法不仅可以实现自动刷新,还可以实现自动换行

package com.edu.printwriter;import java.io.BufferedReader;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.PrintWriter;public class CopyDemo {public static void main(String[] args) throws IOException {//创建目的地和数据源BufferedReader br = new BufferedReader(new FileReader("CopyDemo.java"));//使用能够实现自动刷新的构造方法PrintWriter pw = new PrintWriter(new FileWriter("Copy.java"), true);PrintWriter pw = new PrintWriter(new FileOutputStream("Copy.java"), true);//调用方法读取并复制数据String line;while ((line=br.readLine())!=null) {pw.println(line);//调用println方法实现自动刷新}//关流br.close();pw.close();}}




原创粉丝点击