?? filerw.java
字號:
//FileRW.java
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();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -