java—Io(二)

3 篇文章 0 订阅

谈谈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());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值