首页>代码>java IO工具类大全>/IO/src/IO/FileRW.java
package IO;

import java.io.*;
import java.util.*;

public class FileRW {
	// 需要输入的person数目。 
	public static int NUMBER = 3;

	public static void main(String[] args) {
		Person[] people = new Person[NUMBER];
		// 暂时容纳输入数据的临时字符串数组。 
		String[] field = new String[4];
		// 初始化field数组。 
		for (int i = 0; i < 4; i++) {
			field[i] = "";
		}
		// IO操作必须捕获IO异常。 
		try {
			// 用于对field数组进行增加控制。 
			int fieldcount = 0;
			// 先使用System.in构造InputStreamReader,再构造BufferedReader。 
			BufferedReader stdin = new BufferedReader(new InputStreamReader(
					System.in));
			for (int i = 0; i < NUMBER; i++) {
				fieldcount = 0;
				System.out.println("The number " + (i + 1) + " person");
				System.out
						.println("Enter name,age,salary,married(optional),please separate fields by ':'");
				// 读取一行。 
				String personstr = stdin.readLine();
				// 设置分隔符。 
				StringTokenizer st = new StringTokenizer(personstr, ":");
				// 判断是否还有分隔符可用。 
				while (st.hasMoreTokens()) {
					field[fieldcount] = st.nextToken();
					fieldcount++;
				}
				// 如果输入married,则field[3]不为空,调用具有四个参数的Person构造函数。 
				if (field[3] != "") {
					people[i] = new Person(field[0],
							Integer.parseInt(field[1]), Double
									.parseDouble(field[2]), field[3]);
					// 置field[3]为空,以备下次输入使用。 
					field[3] = "";
				}
				// 如果未输入married,则field[3]为空,调用具有三个参数的Person构造函数。 
				else {
					people[i] = new Person(field[0],
							Integer.parseInt(field[1]), Double
									.parseDouble(field[2]));
				}
			}
			// 将输入的数据保存至“people.dat”文本文件中。 
			PrintWriter out = new PrintWriter(new BufferedWriter(
					new FileWriter("people.dat")));
			writeData(people, out);
			// 关闭流。 
			out.close();
			// 从文件“people.dat”读取数据。 
			BufferedReader in = new BufferedReader(new FileReader("people.dat"));
			Person[] inPeople = readData(in);
			// 关闭流。 
			in.close();
			// 输出从文件中读入的数据。 
			for (int i = 0; i < inPeople.length; i++) {
				System.out.println(inPeople[i]);
			}
		} catch (IOException exception) {
			System.err.println("IOException");
		}
	}

	// 将所有数据写入输出流。 
	static void writeData(Person[] p, PrintWriter out) throws IOException { 
      // 写入记录条数,即人数。 
      out.println(p.length); 
      for (int i=0  ;i< p.length; i++) { 
      p[i].writeData(out); 
      } 
      }
	// 将所邮淙肓髦卸脸觥?
	static Person[] readData(BufferedReader in) throws IOException {
		// 获取记录条数,即人数。 
		int n = Integer.parseInt(in.readLine());
		Person[] p = new Person[n];
		for (int i = 0; i < n; i++) {
			p[i] = new Person();
			p[i].readData(in);
		}
		return p;
	}
}

class Person {
	private String name;
	private int age;
	private double salary;
	private String married;

	public Person() {
	}

	public Person(String n, int a, double s) {
		name = n;
		age = a;
		salary = s;
		married = "F";
	}

	public Person(String n, int a, double s, String m) {
		name = n;
		age = a;
		salary = s;
		married = m;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	public double getSalary() {
		return salary;
	}

	public String getMarried() {
		return married;
	}

	// 设置输出格式。 
	public String toString() {
		return getClass().getName() + "[name=" + name + ",age=" + age
				+ ",salary=" + salary + ",married=" + married + "]";
	}

	// 写入一条记录,即一个人的数据到输出流。 
	public void writeData(PrintWriter out) throws IOException {
		// 格式化输?
		out.println(name + ":" + age + ":" + salary + ":" + married);
	}

	// 从输入流读入一条记录,即一个人的数据。 
	public void readData(BufferedReader in) throws IOException {
		String s = in.readLine();
		StringTokenizer t = new StringTokenizer(s, ":");
		name = t.nextToken();
		age = Integer.parseInt(t.nextToken());
		salary = Double.parseDouble(t.nextToken());
		married = t.nextToken();
	}
}
最近下载更多
1358849392  LV21 2022年11月11日
A_xiaobao  LV9 2021年7月12日
CxlyboSoft  LV6 2020年2月27日
zhushizhan  LV3 2019年12月16日
故事_sun  LV26 2018年5月25日
liuyouminglove  LV2 2018年5月5日
diligentcat  LV2 2016年11月7日
Yuancc  LV21 2016年7月29日
developerAndroid  LV1 2016年7月26日
likoaong  LV11 2016年5月27日
最近浏览更多
1358849392  LV21 2022年11月11日
crosa_Don  LV18 2022年7月2日
双鱼座程序员7号  LV6 2022年4月23日
You're'ere I live. 2021年10月15日
暂无贡献等级
A_xiaobao  LV9 2021年7月12日
ahdaudha  LV7 2021年4月9日
1342203642  LV10 2020年9月1日
linjh123  LV1 2020年7月2日
Gyq灬ming  LV11 2020年6月22日
nhslailuo  LV2 2020年5月14日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友