36、IO流——LineNumberReader、内存操作流、读写本数据类型流、打印流

LineNumberReader

跟踪行号的缓冲字符输入流
此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号

构造方法
public LineNumberReader(Reader in)使用默认输入缓冲区的大小创建新的行编号 reader

成员方法
public int getLineNumber()获得当前行号

public void setLineNumber(int lineNumber)设置当前行号

使用

LineNumberReader lineNumberReader = new LineNumberReader(new FileReader("lnr.txt"));
// System.out.println("lineNumberReader.getLineNumber():+lineNumberReader.getLineNumber());
lineNumberReader.setLineNumber(10);

String line = null;
while ((line = lineNumberReader.readLine()) != null) {
	System.out.println(lineNumberReader.getLineNumber() + " : " + line);
}

内存操作流

用于处理临时的数据,程序结束,数据消失,不需要调用释放资源close()方法

字节数组
ByteArrayInputStream
ByteArrayOutputStream

public byte[] toByteArray()创建一个新分配的 byte 数组,其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中

使用

//创建对象
ByteArrayOutputStream bStream= new ByteArrayOutputStream();

//写数据
for (int i = 0; i < 10; i++) {
	bStream.write(("hello"+i).getBytes());
}

//释放资源 不需要调用close()方法
//bStream.close();
//以上已经把数据写到内存中

byte[] by = bStream.toByteArray();

ByteArrayInputStream bStream2 = new ByteArrayInputStream(by);
int by1 = 0;
while ((by1= bStream2.read())!=-1) {
	System.out.print((char)by1);
}
	
//释放资源 不需要调用close()方法
//bStream2.close();

字符数组
CharArrayReader
CharArrayWriter

字符串
StringReader
StringWriter

读写基本数据类型流

DataInputStream
读取基本 Java 数据类型

构造方法
public DataInputStream(InputStream in)使用指定的底层 InputStream 创建一个 DataInputStream

DataOutputStream
将基本Java 数据类型写入输出流中

构造方法
DataOutputStream(OutputStream out)

注意点
使用DataInputStream读取的顺序一定要和DataOutputStream写入时的顺序一致,否则出现问题

使用

public static void main(String[] args) throws IOException {
	write();
	read();
}

public static void write() throws IOException {
	DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("dos.txt"));

	dataOutputStream.writeInt(10);
	dataOutputStream.writeShort(11);
	dataOutputStream.writeChar('b');
	dataOutputStream.writeDouble(12.58);
	dataOutputStream.writeBoolean(true);
	dataOutputStream.writeLong(1454444L);
	dataOutputStream.writeFloat(1.457F);
	dataOutputStream.writeByte(34);

	dataOutputStream.close();
}

public static void read() throws IOException {
	DataInputStream dataInputStream = new DataInputStream(new FileInputStream("dos.txt"));

	int i = dataInputStream.readInt();
	short s = dataInputStream.readShort();
	char c = dataInputStream.readChar();
	double d = dataInputStream.readDouble();
	boolean b = dataInputStream.readBoolean();
	long l = dataInputStream.readLong();
	float f = dataInputStream.readFloat();
	byte by = dataInputStream.readByte();
	dataInputStream.close();

	System.out.println(i);
	System.out.println(d);
	System.out.println(c);
	System.out.println(b);
	System.out.println(l);
	System.out.println(f);
	System.out.println(by);
	System.out.println(s);
}

打印流

字符打印流:PrintWriter
向文本输出流打印对象的格式化表示形式
与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,
而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符

构造方法
public PrintWriter(String fileName)throws FileNotFoundException
创建具有指定文件名称且不带自动行刷新的新 PrintWriter
此便捷构造方法创建必要的中间 OutputStreamWriter,后者将使用此 Java 虚拟机实例的默认 charset 进行字符编码

public PrintWriter(OutputStream out,boolean autoFlush)
通过现有的 OutputStream 创建新的 PrintWriter
此便捷构造方法创建必要的中间 OutputStreamWriter,后者使用默认字符编码将字符转换为字节

字节打印流:PrintStream
打印流的特点:
1、只有写数据的,没有读数据
2、可操作任意类型数据
3、若启动了自动刷新则自动刷新
4、该流是可以直接操作文本文件的
FileInputStream
FileOutputStream
FileReader
FileWriter
PrintStream
PrintWriter

1、如何操作任意类型数据
print()
println()

2、启动自动刷新
public PrintWriter(OutputStream out,boolean autoFlush)
换行:
println()等价于
bw.write()
bw.newLine()
bw.flush()

流:
基本流:能够直接读写
高级流:在基本流基础上提供了一些高级功能

使用

PrintWriter printWriter= new PrintWriter("pw.txt");
PrintWriter printWriter= new PrintWriter(new FileOutputStream("pw.txt"),true);

//printWriter.write("haha");
//printWriter.write(100);

//printWriter.print("nihao");
//printWriter.print(100);
printWriter.println("nihao");
printWriter.println(100);

printWriter.close();

复制文本:

// 创建数据源对象
BufferedReader bufferedReader = new BufferedReader(new FileReader("PrintWriterDemo.java"));

// 目标地对象
PrintWriter pWriter = new PrintWriter(new FileWriter("copy.java"), true);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
	pWriter.println(line);
}

// 释放资源
bufferedReader.close();
pWriter.close();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值