Java集合类和输入输出
一、 实验目的
1、掌握Collection接口,List集合,Set集合,Map集合
2、掌握输入/输出流、File类、文件输入/输出流、带缓存的输入/输出流、数据输入/输出流
二、实验内容与要求
1、完成以下代码
(1)定义一个学生类Student,包括:
成员变量:no:学号 //字符型,由9位数字字符构成,格式为:年+班+学号
name:姓名 //字符型,
sex:性别 //字符型
math:数学成绩 //float
java:java成绩 //float
english:英语成绩//float
mean:平均分数//float
成员方法:无参数构造方法 Student();
有参数构造方法Student(String no,String name,boolean sex,float math,float java,float english);
设置除mean外的其他成员变量的方法:setNo(String no);setSex(String sex);setMath(float math);setJava(float java);setEnglish(float english)
获取成员变量的方法:getNo(); getSex(); getMath(); getJave(); getEnglish(); getMean();
重写equals方法,依据学号判断是否相等,实现compareTo()方法,依据学号判断大小。
(2)编写个Test类,在主方法中实现以下功能:
1)生成n个student对象,用ArrayList或者LinkedList对象存放n个学生对象。
2)查找学号为“201708003”的学生,找到后从表中删除该学生。
3)利用ArrayList或者LinkedList对象对n个学生对象分别按照数学,英语,java,mean排序,并输出排序结果。
4)按照学号对n个学生对象排序,提取学号从“201708004”到“201708009”的学生对象构成新表,输出新表。
5)删除平均分没有达到60分的学生对象,输出删除后的结果。
2、编程程序将下面这首诗写入文件poem.txt中:
登鹳雀楼
【唐】 李 白
白日依山尽,黄河入海流。
欲穷千里目,更上一层楼。
3、从poem.txt中读入诗句,
将“李 白”修改为“王之涣”,然后存入文件mpoem.txt中。
三、实验结果
1.
package shijian61;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
class students{
String no; //字符型,由9位数字字符构成,格式为:年+班+学号
String name;//字符型,
String sex; //字符型
float math;//float
float java; //float
float english; //float平均分数
float mean;
students(){
no="20170701";
name="wzd";
sex="nan";
math=98;
java=97;
english=96;
mean=(math+java+english)/3;
}
students(String no,String name,String sex,float math,float java,float english){
this.no=no;
this.name=name;
this.sex=sex;
this.math=math;
this.java=java;
this.english=english;
this.mean=(math+java+english)/3;
}
void setNo(String no){
this.no=no;
}
void setName(String name){
this.name=name;
}
void setSex(String sex){
this.sex=sex;
}
void setMath(float math){
this.math=math;
}
void setJava(float java){
this.java=java;
}
void setEnglish(float english){
this.english=english;
}
String getNo(){
return this.no;
}
String getSex(){
return this.sex;
}
float getMath(){
return this.math;
}
float getJave(){
return this.java;
}
float getEnglish(){
return this.english;
}
float getMean(){
return this.mean;
}
boolean equals(String no){
//重写equals方法,依据学号判断是否相等
if(this.no==no) {
return true;
}
return false;
}
}
public class shijian61 {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
// TODO 自动生成的方法存根
//生成n个student对象,用ArrayList或者LinkedList对象存放n个学生对象。
//list<students>list=new ArrayList<>();
ArrayList ls = new ArrayList();
students[] s=new students[4];
for( int i=0;i <4;i++ ) { //给数组增加10个Int元素
s[i]=new students();
ls.add(s[i]);
}
/*
for(int i = 0;i<2;i++) {
System.out.println(s[i].no+s[i].name);
}*/
//修改原有初始化数据
for(int i = 0;i<4;i++) {
System.out.println("第"+(i+1)+"个学生");
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.print("no=");
String no = sc.nextLine();
System.out.print("name=");
String name = sc.nextLine();
System.out.print("sex=");
String sex = sc.nextLine();
System.out.print("math=");
float math = sc.nextFloat();
System.out.print("java=");
float java = sc.nextFloat();
System.out.print("english=");
float english = sc.nextFloat();
s[i].setNo(no);
s[i].setName(name);
s[i].setSex(sex);
s[i].setMath(math);
s[i].setJava(java);
s[i].setEnglish(english);
}
//查找学号为“201708003”的学生,找到后从表中删除该学生。
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.print("移除的学号为no=");
String a = sc.nextLine();
for(int i = 0;i<4;i++) {
if(s[i].getNo().equals(a)) {
ls.remove(i);
}
}
System.out.println("学生的成绩:");
for(int i = 0;i<ls.size();i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"no="+s[i].no+"java="+s[i].java+" "+"english="+s[i].english+" "+"math="+s[i].math);
}
/*
for(int i = 0;i<ls.size();i++) {
students t = (students)ls.get(i);
System.out.println("name:"+t.name+"age:"+t.no);
}
for(int i = 0;i<3;i++) {
System.out.println(s[i].no+s[i].name);
}
*/
//利用ArrayList或者LinkedList对象对n个学生对象分别按照数学,英语,java,mean排序,并输出排序结果。
students b=new students();
//java
for(int i = 0;i<ls.size()-1;i++) {
int index=i;
for(int j = i+1;j<ls.size();j++) {
if(s[index].java>s[j].java) {
b=s[index];
s[index]=s[j];
s[j]=b;
}
}
}
//扩展代码串:输出Java成绩排序
System.out.println("按java排序学生的成绩:");
for(int i = 0;i<ls.size();i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"no="+s[i].no+"java="+s[i].java+" "+"english="+s[i].english+" "+"math="+s[i].math);
}
//math
for(int i = 0;i<ls.size()-1;i++) {
int index=i;
for(int j = i+1;j<ls.size();j++) {
if(s[index].math>s[j].math) {
b=s[index];
s[index]=s[j];
s[j]=b;
}
}
}
//扩展代码串:输出math成绩排序
System.out.println("按math排序学生的成绩:");
for(int i = 0;i<ls.size();i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"no="+s[i].no+"java="+s[i].java+" "+"english="+s[i].english+" "+"math="+s[i].math);
}
//english
for(int i = 0;i<ls.size()-1;i++) {
int index=i;
for(int j = i+1;j<ls.size();j++) {
if(s[index].english>s[j].english) {
b=s[index];
s[index]=s[j];
s[j]=b;
}
}
}
//扩展代码串:输出english成绩排序
System.out.println("按english排序学生的成绩:");
for(int i = 0;i<ls.size();i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"no="+s[i].no+"java="+s[i].java+" "+"english="+s[i].english+" "+"math="+s[i].math);
}
//按照学号对n个学生对象排序
for(int i = 0;i<ls.size()-1;i++) {
int index=i;
for(int j = i+1;j<ls.size();j++) {
if(s[index].no.compareTo(s[j].no)!=0) {
b=s[index];
s[index]=s[j];
s[j]=b;
}
}
}
System.out.println("按no排序学生的成绩:");
for(int i = 0;i<ls.size();i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"no="+s[i].no+"java="+s[i].java+" "+"english="+s[i].english+" "+"math="+s[i].math);
}
//提取学号从“201708004”到“201708009”的学生对象构成新表,输出新表。
ArrayList ls2 = new ArrayList();
int c=0,d=0;
@SuppressWarnings("resource")
Scanner sc2 = new Scanner(System.in);
System.out.print("学号初始为no=");
String a2 = sc2.nextLine();
System.out.print("学号结束为no=");
String a3 = sc2.nextLine();
for(int i = 0;i<ls.size();i++) {
if(s[i].getNo().equals(a2)) {
c=i;
}
if(s[i].getNo().equals(a3)) {
d=i;
}
}
for( int i=c;i<=d;i++ ) { //给数组增加10个Int元素
ls2.add(s[i]);
}
System.out.println("学生的成绩:");
for(int i = 0;i<ls2.size();i++) {
@SuppressWarnings("unused")
students t = (students)ls2.get(i);
System.out.println("第"+(i+1)+"个学生的成绩 "+"no="+t.no+"java="+t.java+" "+"english="+t.english+" "+"math="+t.math);
}
//删除平均分没有达到60分的学生对象,输出删除后的结果。
for(int i = 0;i<ls.size();i++) {
if(s[i].mean<60) {
ls.remove(i);
}
}
System.out.println("平均分没有达到60分学生的成绩:");
for(int i = 0;i<ls.size();i++) {
students t = (students)ls.get(i);
System.out.println("第"+(i+1)+"个学生的成绩 "+"no="+t.no+"java="+t.java+" "+"english="+t.english+" "+"math="+t.math);
}
}
}
2.
package shijian62;
import java.io.*;
public class shijian62 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
File file = new File("word.txt"); // 创建文件对象
/*if (file.exists()) { // 如果该文件存在
file.delete(); // 将文件删除
System.out.println("文件已删除"); // 输出的提示信息
}
else { // 如果文件不存在
try { // try语句块捕捉可能出现的异常
file.createNewFile(); // 创建该文件
System.out.println("文件已创建"); // 输出的提示信息
}
catch (Exception e) { // catch处理该异常
e.printStackTrace();
}// 输出异常信息
}
if (file.exists()) { // 如果文件存在
String name = file.getName(); // 获取文件名称
long length = file.length(); // 获取文件长度
boolean hidden = file.isHidden(); // 判断文件是否是隐藏文件
System.out.println("文件名称:" + name); // 输出信息
System.out.println("文件长度是:" + length);
System.out.println("该文件是隐藏文件吗?" + hidden);
}
else { // 如果文件不存在
System.out.println("该文件不存在"); // 输出信息
}
}*/
//public void write(byte[] b,int off,int len) throws IOException
try { // 捕捉异常
FileOutputStream out = new FileOutputStream(file);
byte buy[] = "登鹳雀楼\r\n【唐】 李 白\r\n 白日依山尽,黄河入海流。 \r\n 欲穷千里目,更上一层楼。".getBytes();
out.write(buy); // 将数组中信息写入到文件中
out.close(); // 将流关闭
} catch (Exception e) { // catch语句处理异常信息
e.printStackTrace(); // 输出异常信息
}
try {
FileInputStream in = new FileInputStream(file);
byte byt[] = new byte[1024]; // 创建byte数组
int len = in.read(byt); // 从文件中读取信息
System.out.println("文件中的信息是:");
System.out.println(new String(byt, 0, len));
in.close(); // 关闭流
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
}
}
}
3.
package shijian63;
import java.io.*;
public class ahijian63 { // 创建类
public static void main(String args[]) throws IOException { // 主方法
// 定义字符串数组
String content[] = { "登鹳雀楼", "【唐】 李 白", "白日依山尽,黄河入海流。 "," 欲穷千里目,更上一层楼。" };
File file = new File("word.txt"); // 创建文件对象
try {
FileWriter fw = new FileWriter(file); // 创建FileWriter类对象
// 创建BufferedWriter类对象
BufferedWriter bufw = new BufferedWriter(fw);
for (int k = 0; k < content.length; k++) { // 循环遍历数组
bufw.write(content[k]); // 将字符串数组中元素写入到磁盘文件中
bufw.newLine(); // 将数组中的单个元素以单行的形式写入文件
}
bufw.close(); // 将BufferedWriter流关闭
fw.close(); // 将FileWriter流关闭
} catch (Exception e) { // 处理异常
e.printStackTrace();
}
try {
FileReader fr = new FileReader(file); // 创建FileReader类对象
// 创建BufferedReader类对象
BufferedReader bufr = new BufferedReader(fr);
String s = null; // 创建字符串对象
@SuppressWarnings("unused")
int i = 0; // 声明int型变量
// 如果文件的文本行数不为null,则进入循环
while ((s = bufr.readLine()) != null) {
i++; // 将变量做自增运算
System.out.println(s); // 输出文件数据
}
bufr.close(); // 将FileReader流关闭
fr.close(); // 将FileReader流关闭
} catch (Exception e) { // 处理异常
e.printStackTrace();
}
FileInputStream in = new FileInputStream(file);
byte byt[] = new byte[1024]; // 创建byte数组
int len = in.read(byt); // 从文件中读取信息
byt[17]='王';byt[18]='之';byt[19]='焕';
System.out.println("文件中的信息是:");
System.out.println(new String(byt, 0, len));
in.close(); // 关闭流
}
}

浙公网安备 33010602011771号