谈谈java的各种流
对象流(objectinputstream,objectoutputstream)
1.将需要流传的数据实现Serializable接口,这里传一个people对象(假如对象里面嵌套对象属性,那么嵌套的那个对象的类也必须实现serializable接口)
class people implements Serializable {
private String name;
private String age;
public people(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "people{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
2.使用writeObject( )方法先经行写入,不然会出错(EOFException)
people people = new people("陌生人", "22");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("D:\\java_test\\java.txt")));
objectOutputStream.writeObject(people);//写的时候是序列化
3.使用readObject()方法经行读取操作
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("D:\\java_test\\java.txt")));
people o = (people) objectInputStream.readObject();//读的时候是反序列化
System.out.println(o.toString());
objectOutputStream.close();
objectInputStream.close();
随机流(可以读可以写,需要配置参数-RandomAccessFile)
RandomAccessFile accessFile = new RandomAccessFile(new File("D:\\java_test\\java.txt"), "w");//这里配置了参数,所以可以读和写
long filePointer = accessFile.getFilePointer();//打印文件指针位置
System.out.println(filePointer);//因为是刚开始,所以文件指针是0
accessFile.writeUTF("中北大学");
long filePointer1 = accessFile.getFilePointer();//打印文件指针位置
System.out.println(filePointer1);//此时文件指针已近到了末尾,如果不seek()设置指针,那摩此时读取将会报错
accessFile.seek(0);//设置文件指针位置,将文件位置放到开头
String s = accessFile.readUTF();
System.out.println(s);
accessFile.close();
数据流(datainputstream,dataoutputstream)
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File("D:\\java_test\\88.dtd")));
dataOutputStream.writeChars("d");
dataOutputStream.writeUTF("dfaf");
dataOutputStream.writeBoolean(true);
dataOutputStream.write(12);
dataOutputStream.close();
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("D:\\java_test\\88.dtd")));
System.out.println(dataInputStream.readChar());
System.out.println(dataInputStream.readUTF());
System.out.println(dataInputStream.readBoolean());
System.out.println(dataInputStream.read());
注意:1.数据流必须先写后读,不然会报错EOFExpection(数据流写进去的时候会在文件的开头和结尾写入特定的标志,而假如你使用自己手的文件读出的时候,数据流会因为读取不到哪个开始的标志所以结束。因此会报错)
2.该数据流可以自己定义文件格式,比如java.aaa,java.abb.java.dtd等,随便定义,这样可以起到保护数据的作用,一般这样的文件在电脑是打不开的,即使用编辑器打开也会是乱码
标准输入输出流(system.in ,system.out)
system.in指的是键盘输入
system.out指的是控制台输出
当然我们可以设置输入的文件和输出的文件
System.setOut(new PrintStream(new FileOutputStream(new File("D:\\java_test\\88.txt"))));
System.out.println("你好,陌生人");//此时“你好,陌生人”便写到了D:\java_test\88.txt文件中
System.setIn(new FileInputStream(new File("D:\\java_test\\java.txt")));//设置输入文件路径
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//system.in返回值是一个Inputstream,将他给了缓冲流经行读取
char b[] = new char[1024];
String s = "";
while ((s = bufr.readLine()) != null) {
if (s.equals("e") || s.equals("exit")) {
break;
}
System.out.println(s.toUpperCase().toString());
}