重生之我是Java小白八

一.IO流

1.1 分类 

1.1.1按照数据流向

1.输入流    读入数据 :外界数据 ---> java程序

2.输出流    写出数据 : java程序 ---> 外界存储中

1.1.2 按照数据类型

1.字节流 

  字节输入流 :InputStream

字节输出流 :OutputStream

2.字符流 

字符输入流:Reader

字符输出流:Writer

二 字节输出流 OutputStream

2.1概述

1.OutputStream 是抽象类 无法new出对象 使用他的子类 FileOutputStream

2.2 FileOutputStream的构造方法

2.2.1 FileOutputStream(File file) 创建一个字节输出流对象 

1.里面创建的对象是文件夹对象,文件夹可以不存在

2.2.2 FileOutputStream(String name) 创建一个字节输出流对象 

1.里面传入的是文件路径

2.3  OutputStream 字节流写数据的方式

2.3.1 public void write(int b)

1.将int值转化为ascll码写入文件

2.3.1 public void write(byte[] b) 写整个字节数组

1.写一个字节数组进去 同时转化成ascll码

2.3.3 public void write(byte[] b,int off,int len) 写字节数组的一部分

2.3.4 实现 追加写 

1.在构造方法中添加一个 true即可

2.3.5 实现换行

1.手动写一个换行符

\r\n 是换行符 写进文件需要转化成字节数组

"\r\n".getBytes()

三 字节输入流  InputStream

3.1概述

1.InputStream是抽象类 无法实现,需要他的实现子类 FileInputStream

3.2 FileInputStream的构造方法

3.2.1 FileInputStream(File file)

1.文件夹或者文件必须存在

2.传入的是文件夹对象

3.2.2 FileInputStream(String name)

1.直接传入 路径

3.3 InputStream 读数据的方法

3.3.1 public int read() 

1.每调用一次该方法,就会读取一个字节出来

2.有返回值 返回的是对应的ascll值

2.想要字符形式 强转型即可

3.如果读取的次数超过文件里面的内容 那么返回的值是-1

4.每read()一次,光标就会向后移动一个字节单位

3.3.2 使用while循环读取

3.3.3 public int read(byte[] b)

1.每次读一个字节数组 b是读的每次长度

3.4 复制文件

 四 字节缓冲流

4.1 字节缓冲输出流 BufferedOutputStream

4.1.1 构造方法

1. BufferedOutputStream(OutputStream out)

1.传入的是字节输出流对象

2.需要flush一下

3.close里面有flush的效果

package com.shujia.day15;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilterOutputStream;

public class BufferedOutputStreamDemo {
    public static void main(String[] args) throws Exception {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/com/shujia/day15/a.txt",true));
        bos.write(97);
        bos.flush();
        bos.close();
    }
}

4.1.2 write()

1.可以一次写一个字节,转化成相对应的ascll码

2.也可以写一个字符数组

4.2 字节缓冲输入流 BufferedInputStream

4.2.1构造方法

1.BufferedInputStream(InputStream in)

1.传入的是字节输入流对象

4.2.3 read()

1.一次读一个字节

2.一次读一个数组

package com.shujia.day15;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class BufferedInputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src/com/shujia/day15/b.txt"));
        //一次读一个字节
//        int i=0;
//        while ((i=bis.read())!=-1){
//            System.out.print((char) i);
//        }
//        bis.close();

        //一次读一个数组
        byte[] bytes=new byte[1024];
        int length=0;
        while ((length=bis.read(bytes))!=-1){
            String s=new String(bytes,0,length);
            System.out.println(s);
        }
    }
}

五 字符输出流 OutputStreamWriter

5.1概述

1.Writer(抽象类) - OutputStreamWriter(子类)

2.简化写法 FileWriter,他是OutputStreamWriter子类

new OutputStreamWriter osw= new OutputStreamWriter(new FileOutputStream(文件路径));

等同于 new  FileWriter fw =new  FileWriter(文件路径);

5.2构造方法

5.2.1 public OutputStreamWriter(OutputStream out)

1.传入的是字节输出流对象

5.2.2 public OutputStreamWriter(OutputStream out,String charsetName)

1.传入的是字节输出流对象

2.可以传一个编码进去

5.3成员方法

5.3.1 public void write(int c) 

1.一次写一个字符

2.如果是数字字符,转化成相对应的ascll码

5.3.2 public void write(char[] cbuf)

1.一次写一个字符数组

5.3.3 public void write(char[] cbuf,int off,int len)

1.一次写一个字符数组的一部分

5.3.4 public void write(String str)

1.一次写一个字符串

5.3.5 public void write(String str,int off,int len)

1.一次写一个字符串的一部分

六 字符输入流 InputStreamReader

6.1概述

1.Reader(抽象类) - InputStreamReader(子类)

2.简化写法 FileReader 他是InputStreamReader子类

new InputStreamReader isr =new InputStreamReader(new FileInputStream("文件路径"))

等同于 new FileReader rf =new FileReader("文件路径")

6.2 构造方法

6.2.1 public InputStreamReader(InputStream in)

1.传入的是字节输入流对象

6.2.2  public InputStreamReader(InputStream in,String charsetName)

1.传入的是字节输入流对象

2.可以传一个编码进去

3.读到的数据转化成相对应的ascll码

6.3成员方法

6.3.1read()

1.一次读一个字符

2.一次读一个字符数组

package com.shujia.day15;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;

public class InputStreamReaderDemo1 {
    public static void main(String[] args) throws Exception {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("src/com/shujia/day15/a.txt"));
        //一次读一个字符
        int i=0;
        while ((i=isr.read())!=-1){
            System.out.println((char) i);
        }
        //一次读一个字符数组
        char[] chars=new char[1024];
        int length=0;
        while ((length=isr.read(chars))!=-1){
            String s=new String(chars,0,length);
            System.out.println(s);
        }
    }
}

七 字符缓冲输出流

7.1构造方法

7.1.1 BufferedWriter(Writer out)

1.传入的是字符输出流

7.2成员方法

7.2.1 writer()

1.可以写一个字符

2.可以写一个字符数组

3,可以写字符数组的一部分

4.可以写一个字符串

5.可以写字符串的一部分

6. writeLine()一次写一个换行符

package com.shujia.day16;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;

public class BufferedWriterDemo1 {
    public static void main(String[] args) throws Exception {
//        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src/com/shujia/day15/b.txt")));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/com/shujia/day16/a.txt"));

        bw.write("皇大帝");
        bw.newLine();
        bw.write("kkk");
        bw.flush();

    }
}

八 字符缓冲输入流

8.1构造方法

8.1.1 BufferedReader(Reader in)

1.传入的是字符输入流

8.2成员方法

8.2.1 read()

1.一次读一个字符

        int i = 0;
        while ((i=br.read())!=-1){
           System.out.print((char) i);

        }

这里用的是字符流

2.一次读一个字符数组

     

char[] chars=new char[1024];
int length=0;
while ((length= br.read(chars))!=-1){
    String s=new String(chars,0,length);
    System.out.println(s);

}

8.2.2readLine()

不会读取到换行符

3.一次读一行

String line=null;

while ((line=br.readLine())!=null){

        System.out.println(line);

}

8.3 复制文件的方法

8.3.1 一次读一个(字节,字符)

    int i = 0;
        while ((i=br.read())!=-1){
            bw.write(i);
            bw.flush();
        }

中间的br对象名改用随便改变 这里用的是字符缓冲输入流

8.3.2 一次读写一个(字节,字符)数组

        char[] chars = new char[1024];
        int length = 0;
        while ((length = br.read(chars)) != -1) {
            bw.write(chars, 0, length);
            bw.flush();
        }

我这里用的是字符流

8.3.3 一次读写一行 (字符缓冲流特有)

        String line = null;
        while ((line = br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

九 序列化流(对象流)

9.2 序列化

9.2.1概述

1.将java数据对象像流一样在网络进行传输

2.类必须实现Serializable接口

9.2.2构造方法

ObjectOutputStream(字节流对象或者字符流对象)

9.2.3 成员方法

1.public final void writeObject(Object obj)将指定的对象写入ObjectOutputStream。

9.2.4 实现对象的序列化

测试类

package com.shujia.day16;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        //创建序列化对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/com/shujia/day16/b.txt"));
        //创建学生对象
        Student2 s1 = new Student2("张三", 18);
        //public final void writeObject(Object obj) 将指定的对象写入ObjectOutputStream。
        oos.writeObject(s1);
        oos.flush();
    }
}

 想要序列化的类 需要实现Serializable接口

package com.shujia.day16;

import java.io.Serializable;

// alt+回车
public class Student2 implements Serializable {
//    private static final long serialVersionUID = -7932280709648663762L;
    private String name;
    private int age;

    public Student2() {
    }

    public Student2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

9.3反序列化

9.3.1概述 

1.将网络中传输的流转化一个java数据对象

9.3.2 构造方法

ObjectInputStream(字节流或者字符流对象)

9.3.3 成员方法

1.public final Object readObject() 读取一个对象。

9.3.4实现反序列化

package com.shujia.day16;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;

public class ObjectInputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        //创建反序列化对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/com/shujia/day16/b.txt"));
        //public final Object readObject() 读取一个对象
        System.out.println(ois.readObject());

    }
}

9.4 小知识点

1.如果实现序列化跟反序列化后 把类成员变量的修饰符改变,会报错,该怎么办了?

解决方案:serialVersionUID永远不变

private static fianl long serialVersionUID=xxxxxxx;

2.如果不想让某一个成员做序列化的话,可以再成员的前面加上transient关键字修饰

十 Properties集合

10.1 public void load(Reader reader)

1.先创建一个Properties

2.加载需要读取的文件

3.将读取的文件作为参数返回到  load(Reader reader)

package com.shujia.day17;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import java.util.Scanner;

public class PropertiesDemo1 {
    public static void main(String[] args) throws Exception {
//        zhuCe();
        login();
    }

    public static void zhuCe() throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入注册的用户名:");
        String uesrname = sc.next(); // username=xxxx
        System.out.println("请输入设置的密码:");
        String password = sc.next(); // password=xxxx

        //创建字符缓冲输出流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src/com/shujia/day17/users.properties", true), StandardCharsets.UTF_8));
        bw.write("uesrname=" + uesrname);
        bw.newLine();
        bw.flush();

        bw.write("password=" + password);
        bw.flush();

        //释放资源
        bw.close();

        System.out.println("用户注册成功!");

    }
    public static void login() throws Exception {
        /*
            Properties类,配置文件类,可以读取或者设置properties结尾的配置文件
         */
        //创建Properties类的对象
        //Properties()
        //创建一个没有默认值的空属性列表。
        Properties properties = new Properties();
        //加载要读取的文件
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("src/com/shujia/day17/users.properties"), StandardCharsets.UTF_8));
        properties.load(br);
        String uesrname = properties.getProperty("uesrname");
        String password = properties.getProperty("password");
        System.out.println(uesrname + "-" + password);
    }
}

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值