(1)学习DataInputStream和DataOutputStream类以及PrintStream类的使用。 编写程序,随机产生100个100-200的整数,使用PrintStream对象输出到文件output.txt中,然后使用DataInputStream类的readInt()方法读出数据,按照从小到大的顺序对100个数排序,在屏幕上输出,同时使用DataOutputStream类的writeInt(int i)方法写到名为sort.dat的文件中。 (2)学习对象的序列化和反序列化和文件的输入输出。 定义一个Student类,编写程序使用对象输出流将一个Student对象和一个字符串对象写入student.dat文件中,然后使用对象输入流读出对象。 备注:利用Swing实现图形用户界面,在图形用户界面上完成功能操作。
时间: 2024-02-20 16:02:29 浏览: 71
实验3 输入输出流的实验.doc
好的,以下是针对题目要求的代码实现和解释。
(1) 随机产生100个100-200的整数,使用PrintStream对象输出到文件output.txt中
```java
import java.io.*;
import java.util.Random;
public class GenerateNums {
public static void main(String[] args) {
Random random = new Random();
PrintStream ps = null;
try {
ps = new PrintStream(new FileOutputStream("output.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for (int i = 0; i < 100; i++) {
int num = random.nextInt(101) + 100; // 生成100-200的随机数
ps.print(num + " ");
}
ps.close();
}
}
```
上述代码中,我们使用了`java.util.Random`类生成100个100-200的随机整数,然后使用`java.io.PrintStream`类的`print`方法将这些整数输出到文件`output.txt`中。
(2) 使用DataInputStream类的readInt()方法读出数据,按照从小到大的顺序对100个数排序,在屏幕上输出,同时使用DataOutputStream类的writeInt(int i)方法写到名为sort.dat的文件中。
```java
import java.io.*;
import java.util.*;
public class SortNums {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<Integer>();
DataInputStream dis = null;
try {
dis = new DataInputStream(new FileInputStream("output.txt"));
while (dis.available() > 0) {
int num = dis.readInt();
nums.add(num);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Collections.sort(nums); // 对100个数进行排序
System.out.println("排序后的结果为:");
for (int num : nums) {
System.out.print(num + " ");
}
// 将排序后的数组写入到sort.dat文件中
DataOutputStream dos = null;
try {
dos = new DataOutputStream(new FileOutputStream("sort.dat"));
for (int num : nums) {
dos.writeInt(num);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
上述代码中,我们使用`java.io.DataInputStream`类的`readInt()`方法读出文件`output.txt`中的整数,并将这些整数存储在一个`java.util.List`对象`nums`中。然后,我们使用`java.util.Collections`类对`nums`中的整数进行排序,并使用`java.io.DataOutputStream`类的`writeInt(int i)`方法将排序后的整数写入到名为`sort.dat`的文件中。
(3) 使用对象输出流将一个Student对象和一个字符串对象写入student.dat文件中,然后使用对象输入流读出对象。
```java
import java.io.*;
public class Student implements Serializable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class ObjectStream {
public static void main(String[] args) {
Student student = new Student("张三", 21);
String message = "这是一个字符串";
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("student.dat"));
oos.writeObject(student); // 将Student对象写入到student.dat文件中
oos.writeObject(message); // 将字符串对象写入到student.dat文件中
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 使用对象输入流读出对象
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("student.dat"));
Student s = (Student) ois.readObject();
String str = (String) ois.readObject();
System.out.println("学生姓名:" + s.getName() + ",年龄:" + s.getAge());
System.out.println("字符串内容:" + str);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
上述代码中,我们定义了一个`Student`类,并让它实现了`java.io.Serializable`接口。这样,我们就可以使用对象流将一个`Student`对象和一个字符串对象写入到文件`student.dat`中,并使用对象流读出这两个对象。
阅读全文