Java I/O 过滤源-带格式的读写操作
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(); } } }
以上就是带格式的过滤流读写操作。