2019.7.25 NIIT第九天
自言自语:种一棵树最好的时间是十年前,或者现在
一、对象数组
- 基本类型:int[] arr={1,2,3,}
- 对象数组:Student[] sr=new Student[3];
存储引用类型
- 把对象放入数组中,这个对象和数组中的对象指向同一个地址,
- 改变这个对象的值,数组中的值也会改变,改变数组中的值,对象的值也会改变
二、集合概述
对象数组用来管理相同类型数据,但是数组是定长的
用数组管理动态变化的数据(定长)不合适
一般情况下,不使用数组来管理数据
可以使用集合类中的ArrayList(列表)来管理数据
列表不定长并且具有跟数组类似的功能
三、ArrayList集合
ArrayList()初始容量为10(可指定)
add()方法增加元素
size()方法返回集合中元素的个数
get()方法获取集合中的元素;
set()方法设置集合元素;
remove()方法移除集合中的元素(只移找到的第一个)参数可以写元素内容,也可以写元素下标
四、学生管理系统
//System.exit(0);非0表示系统异常终止
package StudentContral;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManagerTest {
static ArrayList<Student> list=new ArrayList();
public static void showMainUI() {
while(true) {
System.out.println("----------------欢迎来到学生管理系统---------------");
System.out.println("1、查看所有学生");
System.out.println("2、添加学生");
System.out.println("3、删除学生");
System.out.println("4、修改学生");
System.out.println("5、推出");
Scanner s=new Scanner(System.in);
System.out.println("请输入你的选择");
int cls=s.nextInt();
switch(cls) {
case 1:
printLisr();
break;
case 2:
addStudent();
break;
case 3:
deleteStudent();
break;
case 4:
updateStudent();
break;
case 5:
System.exit(0);
default:
System.out.println("输入错误,请重新输入");break;
}
}
}
private static void deleteStudent() {
//输入学生编号
Scanner s=new Scanner(System.in);
System.out.println("输入学号:");
String id=s.nextLine();
boolean studentIsExist= isstudentIsExist(id);
//判断学生存在
if(studentIsExist) {
//删除学生
Student ss1=getStudent(id);
list.remove(ss1);
}else {
System.out.println("该学生不存在");
}
}
private static void updateStudent() {
Scanner s=new Scanner(System.in);
System.out.println("输入学号:");
String id=s.nextLine();
boolean studentIsExist= isstudentIsExist(id);
Student ss1=null;
//判断学生存在
if(studentIsExist) {
ss1 = getStudent(id);
System.out.println("输入姓名:");
String name=s.nextLine();
System.out.println("输入年龄:");
String age=s.nextLine();
System.out.println("输入地址:");
String address=s.nextLine();
ss1.setName(name);
ss1.setAddress(address);
ss1.setAge(age);
}else {
System.out.println("该学生不存在");
}
}
public static Student getStudent(String id) {
Student ss1=null;
for (Student student : list) {
if(student.getId().equals(id)) {
ss1=student;
}
}
return ss1;
}
public static boolean isstudentIsExist(String id){
//判断学号是否存在
//定义一个标记,判断学号是否存在
boolean studentIsExist=false;//默认不存在
for (Student student : list) {
if(student.getId().equals(id)){
studentIsExist=true;
}
}
return studentIsExist;
}
//添加学生
public static void addStudent() {
//1键入一个学生信息
//创建学生对象并赋值
//把学生对象放入列表
Scanner s=new Scanner(System.in);
System.out.println("输入学号:");
String id=s.nextLine();
if(isstudentIsExist(id)) {
System.out.println("学号已经存在请重新输入");
}else {
System.out.println("输入姓名:");
String name=s.nextLine();
System.out.println("输入年龄:");
String age=s.nextLine();
System.out.println("输入地址:");
String address=s.nextLine();
list.add(new Student(id,name,age,address));
}
}
public static void printLisr() {
for (Student student : list) {
System.out.println(student.toString());
}
}
public static void main(String[] args) {
//显示主界面
Student s1=new Student("11","22","33","44");
Student s2=new Student("12","22","33","44");
Student s3=new Student("13","22","33","44");
list.add(s1);
list.add(s2);
list.add(s3);
showMainUI();
//创建一个学生类
//利用集合完成学生的增删改查,把集合变成成员变量,供所有方法使用
}
//student类
package StudentContral;
public class Student {
private String id;
private String name;
private String age;
private String address;
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age +
", address=" + address + "]";
}
public Student() {
super();
}
public Student(String id, String name, String age, String address) {
super();
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
}
五、IO流的概念
定义:输入输出流
ps:以内存为参照物
- I:input;输入 输入内存-> 读入
- O:output;输出 从内存输出-> 写出
程序运行在内存里->数据写入硬盘
jdk中提供了两个类来操作文件信息的输入和输出
- FileWriter 输出到硬盘
- FileReader 输入到内存
数据从内存写到硬盘的时候,数据是暂时存放在内存
如果要把数据刷到硬盘上,我们去调用一个flush()方法刷新到硬盘上
import java.io.FileWriter;
import java.io.IOException;
public class IOTest{
//创建FileWriter
public static void main(String[] args) throws IOException {
FileWriter out=new FileWriter("d:\\test.txt");
out.write("人没有梦想,和咸鱼有什么区别");
//缓存在内存调用flush()方法,数据才从内存到硬盘
out.flush();
}
}
每次运行程序输出到文件,都会覆盖原来的内容,可以 通过特定方法直接追加
六、flush和close的区别
flush
- 把内存数据刷到硬盘上 close
- 把内存数据刷到硬盘上
- 把输出流给关闭不能再使用FileWriter对象
- 强行使用时,运行会报错!
在做输入输出操作时,输出流关联到文件后,需要消耗资源(文件正在被使用)
(如果使用flush,一直关联到资源,如果使用close,不再关联资源,释放资源,提升效率)
七、相对路径和绝对路径
FileWriter out=new FileWriter("d:\test.txt");带盘符的路径叫做绝对路径
不带盘符的路径叫相对路径
八、FileWriter的其他写法
- void write(String str):写一个字符串数据
- void write(String str,int index,int len):写一个字符串中的一部分数据
- void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97
- void write(char[] chs):写一个字符数组数据
- void write(char[] chs,int index,int len):写一个字符数组的一部分数据
九、FileWriter写入换行以及向文本末尾追加
各系统的换行转义字符:
-
windows:\r\n -
linux:\n -
mac:\r
正确的换行: 判断操作系统,然后加转义字符.......
如何实现数据的追加 FileWriter(String fileName, boolean append)
append为true不会覆盖原先内容,默认false覆盖
十、FileReader
构造方法:
- FileReader(String fileName) 传入一个文件的路径
方法
- int read() 读取单个字符,可以通过强制类型转换成字符型
//判断文件是否读完
int len=0;
while((len=in.read())!=-1){
System.out.println((char)len);
}
- int read(char[] cbuf) 读取字符,并将字符读入数组
- 返回的是读到的字符个数!
- 读到的字符存放在字符数组中!可以一次读取多个字符(可控)
十一、利用FileReader和FileWriter完成文件复制
- 一个字符一个字符的读写
- 一批字符一批字符的读写