Java I/O 过滤流-带格式的读写操作

(1)过滤流:将一个过滤流连接到另一个流上,则在从原始的流读写数据的同时,利用过滤流可以对这些数据进行加工处理。
(2)DataInputStream 和DataOutputStream类:它们分别为FilterInputStream和FilterOutputStream类的子类。同时DataInputStream 和DataOutputStream类由于分别实现了DataInput和DataOutput接口中定义的独立于具体机器的带格式的读写操作,从而可以实现对Java中的不同类型的基本类型数据的读写。

(3)编程方法:为了使用过滤流,用户需要在创建过滤流的同时将过滤流连接到另一个输入(输出)流上。如可以将DataInputStream连接到标准的输入流上,然后用户就可以方便地使用DataInputStream类的readXXX()方法类实现从标准输入中读取数据。

 

DataTest.java

import java.io.*;

public class DataTest {
	
	public static void main(String[] args) throws IOException {
		
		// 将数据写入某一种载体
		DataOutputStream out = new DataOutputStream(new FileOutputStream("invoice1.txt"));

		// 价格
		double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
		
		// 数目
		int[] units = { 12, 8, 13, 29, 50 };
		
		// 描述
		String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" };

		// 向数据过滤流写入主要类型
		for (int i = 0; i < prices.length; i++) {
			// 写入价格
			// 注意为了明了起见,使用tab隔开数据
			out.writeDouble(prices[i]);
			out.writeChar('\t');
			// 写入数目
			out.writeInt(units[i]);
			out.writeChar('\t');
			// 写入描述
			// 行尾加入换行符
			out.writeChars(descs[i]);
			out.writeChar('\n');
		}
		out.close();

		// 将数据读出
		DataInputStream in = new DataInputStream(new FileInputStream("invoice1.txt"));

		double price;
		int unit;
		StringBuffer desc;
		double total = 0.0;

		try {
			// 当文本被全部读出以后会抛出EOFException例外,中断循环
			while (true) {
				// 读出价格
				price = in.readDouble();
				// 跳过tab
				in.readChar();
				// 读出数目
				unit = in.readInt();
				// 跳过tab
				in.readChar();
				char chr;
				// 读出描述
				desc = new StringBuffer();

				while ((chr = in.readChar()) != '\n')
					desc.append(chr);

				System.out.println("You've ordered " + unit + " units of "
						+ desc + " at $" + price);
				total = total + unit * price;
			}
		} catch (EOFException e) {
			System.out.println("For a TOTAL of: $" + total);
		}
		in.close();
	}
}

 

 DataReader.java

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class DataReader {

	public static void main(String args[]) {
		
		int X;
		float Y;
		
		try {
			FileInputStream fis = new FileInputStream("c://UserInput.txt");
			DataInputStream dis = new DataInputStream(fis);
			X = dis.readInt();
			Y = dis.readFloat();
			dis.close();
			System.out.println("X=" + X);
			System.out.println("Y=" + Y);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

 

DataWriter.java

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataWriter {

	public static void main(String args[]) {
		
		int X = 100;
		
		float Y = 3.14f;
	
		try {
			FileOutputStream fos = new FileOutputStream("c://UserInput.txt");
			DataOutputStream dos = new DataOutputStream(fos);
			dos.writeInt(X);
			dos.writeFloat(Y); // 读取数据顺序按照写入顺序依次读取(区分类型)
			dos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

以上就是带格式的过滤流读写操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值