Java周记——IO流补充(第五周)

目录

1.文件夹创建和遍历

2.四个抽象类

3.操作网络流

4.数据流

5.对象流


1.文件夹创建和遍历

mkdir():创建目录

mkdirs():如果父目录链不存在一同创建

list():下级名称

listFiles():下级File

listRoots():根路径

package cn.j.www;

import java.io.File;

public class testdir {
    public static void main(String[]args){
        File dir=new File("E:/mycode/IObuchong/dir/test");//dir不存在
        //创建目录
        boolean flag=dir.mkdir();
        System.out.println(flag);//false
        boolean flag1=dir.mkdirs();
        System.out.println(flag1);//true,并创建dir/test文件
        //dir文件已存在,再次用mkdir
        File dir1=new File("E:/mycode/IObuchong/dir/test1");
        boolean flag2=dir1.mkdir();
        System.out.println(flag2);//true,并在dir目录下创建test1文件
    }
}
package cn.j.www;

import java.io.File;

public class testlist {
    public static void main(String[]args){
        File dir=new File("E:/mycode/IObuchong");
        //列出下一级名称
        String[]subname=dir.list();
        for(String s:subname){
            System.out.println(s);
        }
        //列出下级对象
        File[]subfile=dir.listFiles();
        for(File f:subfile){
            System.out.println(f.getAbsolutePath());
        }
        //列出所有盘符
        File[]roots=dir.listRoots();
        for(File f1:roots){
            System.out.println(f1.getAbsolutePath());
        }
    }
}

2.四个抽象类

抽象类说明常用方法
InputStream字节输入流的父类,数据单位为字节

int read()

void close()

OutputStream字节输出流的父类,数据单位为字节

void write(int)

void flush()

void close()

Reader字符输入流的父类,数据单位为字符

int read()

void close()

Writer字符输出流的父类,数据单位为字符

void write(String)

void flush()

void close()

3.操作网络流

package cn.j.www;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class test {
    public static void main(String[]args) throws IOException {
        BufferedReader isr=new BufferedReader(new InputStreamReader(new URL("http://www.baidu.com").openStream()));
        String s;
        while((s=isr.readLine())!=null){
            System.out.print(s);
        }
    }
}

4.数据流

DataInputStream和DataOutputStream提供了可以存取与机器无关的所有Java基础类型数据(如:int、double、String等)的方法。

DataInputStream和DataOutputStream是处理流,可以对其他节点流或处理流进行包装,增加一些更灵活、更高效的功能。

顺序要与写出的一致

package cn.j.www;

import java.io.*;

public class testdate {
    public static void main(String[]args) throws IOException {
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(baos);
        dos.writeUTF("编码");
        dos.writeInt(45);
        dos.writeDouble(45.5);
        dos.writeChar('a');
        dos.writeBoolean(true);
        dos.flush();
        byte[]datas=baos.toByteArray();
        DataInputStream dis=new DataInputStream(new ByteArrayInputStream(datas));
        System.out.println(dis.readUTF());
        System.out.println(dis.readInt());
        System.out.println(dis.readDouble());
        System.out.println(dis.readChar());
        System.out.println(dis.readBoolean());

    }
}

5.对象流

package cn.j.www;

import com.sun.corba.se.impl.orbutil.ObjectWriter;

import java.io.*;
import java.nio.Buffer;
import java.util.Date;

public class testobject {
    public static void main(String[]args) throws IOException, ClassNotFoundException {
        FileOutputStream fo=new FileOutputStream("test.txt");
        ObjectOutputStream oos=new ObjectOutputStream(fo);
        //写入,序列化
        oos.writeObject(45);
        oos.writeObject("你好!");
        oos.writeObject(39.9);
        oos.writeObject(true);
        student s=new student("20212102","张三",20);
        oos.writeObject(s);
        oos.writeObject(new Date());
        fo.close();
        //读出
        FileInputStream fi=new FileInputStream("test.txt");
        ObjectInputStream dis=new ObjectInputStream(fi);
        Object o1=dis.readObject();
        Object o2=dis.readObject();
        Object o3=dis.readObject();
        Object o4=dis.readObject();
        Object o5=dis.readObject();
        Object o6=dis.readObject();
        fi.close();
        //反序列化
        if(o1 instanceof Integer){
            Integer d=(Integer)o1;
            System.out.println(d);
        }
        if(o2 instanceof String){
            String d=(String)o2;
            System.out.println(d);
        }
        if(o3 instanceof Double){
            Double d=(Double)o3;
            System.out.println(d);
        }
        if(o4 instanceof Boolean){
            Boolean d=(Boolean)o4;
            System.out.println(d);
        }
        if(o5 instanceof student){
            student d=(student)o5;
            System.out.println(d.id+","+d.name+","+d.age);
        }
        if(o6 instanceof Date){
            Date d=(Date)o6;
            System.out.println(d);
        }
    }
    public static class student implements Serializable{
        private String id;
        private String name;
        private transient int age;//transient将年龄抹掉,该数据不需要序列化
        public student(String id,String name,int age){
            this.id=id;
            this.name=name;
            this.age=age;
        }
    }
}

把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。

1. static属性不参与序列化。

 2. 对象中的某些属性如果不想被序列化,不能使用static,而是使用transient修饰。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值