IO流

1.流的分类

1.1 单位:字符流、字节流

1.2 流向:输入、输出

1.3 角色:结点、处理

2.流的体系结构

抽象基类         文件流          缓冲流

InputStream       FileInputStream      BufferedInputStream

OutputStream      OutputStream         BufferedOutputStream

Reader          FileReader         BufferedReader

Writer           FileWriter           BufferedWriter

3.流的操作

1.文件的单个读取  字符读取

 @Test
    public void test1(){
        FileReader fileReader = null;
        try {
            File file = new File("./hello.txt");
            fileReader = new FileReader(file);
            int data;
            while (( data = fileReader.read()) != -1){
                System.out.print((char) data);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                if(fileReader != null)
                    fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

 2.文件的多个字符读取 字符读取

    public void test1(){
        FileReader fileReader = null;
        try {
            File file = new File("./hello.txt");
            fileReader = new FileReader(file);
            int len;
            char[] buffer = new char[5];
            while (( len = fileReader.read(buffer)) != -1){
                for (int i = 0; i < len; i++) {
                    System.out.print(buffer[i]);
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                if(fileReader != null)
                    fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

3.文件的写入 字符写入

public void test2() throws IOException {
    File file = new File("hello1.txt");
    FileWriter fileWriter = new FileWriter(file,true);
    fileWriter.write("i am a china\n");
    fileWriter.write("i am a man\n");
    fileWriter.close();
}

 4.图片的写入 字节写入

public void test4(){
    FileInputStream fileReader = null;
    FileOutputStream fileWriter = null;
    try {
        File srcFile = new File("1.jpg");
        File toFile = new File("2.jpg");
        fileReader = new FileInputStream(s
        fileWriter = new FileOutputStream(
        byte[] bbuffer = new byte[5];
        int len = 0;
        while ((len=fileReader.read(bbuffe
            fileWriter.write(bbuffer,0,len
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fileWriter != null) {
                fileReader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if (fileWriter != null) {
                fileWriter.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5.缓冲流的写入

public void test5(){
    FileInputStream fileReader = null;
    FileOutputStream fileWriter = null;
    try {
        File srcFile = new File("fish.mp4");
        File toFile = new File("fish2.mp4");
        fileReader = new FileInputStream(srcFile);
        fileWriter = new FileOutputStream(toFile);
        BufferedInputStream bufferedInputStream = new 
        BufferedOutputStream bufferedOutputStream = ne
        int len = 0;
        byte[] bbuffer = new byte[10];
        while ((len=bufferedInputStream.read(bbuffer))
            bufferedOutputStream.write(bbuffer,0,len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fileWriter != null) {
                fileReader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if (fileWriter != null) {
                fileWriter.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 6.流转换成字符(字节转字符) 解码操作 读取中文不乱码

 

public void test3() throws IOException {
    File file = new File("abc.txt");
    FileInputStream fileInputStream = new FileInputStream(file);
    InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
    char[] b = new char[5];
    int len = 0;
    while ( (len = inputStreamReader.read(b))!=-1 ){
        java.lang.String s = new java.lang.String(b, 0, len);
        System.out.print(s);
    }
    inputStreamReader.close();
}

 

7.utf-8 转gbk

public void test7() throws IOException {
    InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(new File("a.txt")));
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(new File("a_gbk.txt")),"gbk");
    char[] c = new char[20];
    int len = 0;
    while ( (len=inputStreamReader.read(c))!=-1 ){
        outputStreamWriter.write(c,0,len);
    }
    inputStreamReader.close();
    outputStreamWriter.close();
}

 

8.标准的输入输出流

public static void main(String[] args) {
    InputStreamReader inputStreamReader = null;
    try {
        inputStreamReader = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        while (true){
            System.out.println("请输入字符:");
            String s = bufferedReader.readLine();
            if("e".equals(s) || "exit".equals(s)){
                System.out.println("程序退出");
                break;
            }
            System.out.println(s);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (inputStreamReader != null) {
                inputStreamReader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 9.数据流

public void test2() throws IOException {
    DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File("c.txt")));
    dataOutputStream.writeUTF("张三");
    dataOutputStream.writeInt(23);
    dataOutputStream.writeBoolean(true);
    dataOutputStream.close();
    DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("c.txt")));
    String s = dataInputStream.readUTF();
    int i = dataInputStream.readInt();
    boolean b = dataInputStream.readBoolean();
    System.out.println("姓名:" + s + "年龄:" + i + "是否男性:" + b);
    dataInputStream.close();
}

 10.对象的序列化和反序列化

 public void test3() throws IOException, ClassNotFoundException {
     ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("o.dat")));
     java.lang.String a = new java.lang.String("我是中国人");
     objectOutputStream.writeObject(a);
     objectOutputStream.close();
     ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("o.dat")));
     java.lang.String o = (java.lang.String)objectInputStream.readObject();
     System.out.println(o);
     objectInputStream.close();
 }

 

Person类

package com.cj.java4;

import java.io.Serializable;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotationType {
    String tableName();
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotationField {
    String fieldName();
}

@MyAnnotationType(tableName = "db_person")
public class Person implements Serializable {
    static final long serialVersionUID = 123124377453022888L;
    @MyAnnotationField(fieldName = "db_age")
    public Integer age;
    @MyAnnotationField(fieldName = "db_name")
    private String name;
    Person(){

    }
    private Person(String name){
        this.name = name;
    }
    private Person(Integer age){
        this.age = age;
    }
    public Person(Integer age, String name){
        this.age = age;
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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


    public void show(){
        System.out.println(this.name + "-" +  this.age);
    }
    private String showNation(String nation){
        System.out.println("我是"+nation);
        return nation;
    }

    @Override
    public String toString() {
        return "Person" + "姓名:" + name + "年龄:" + age;
    }
}

 

1 写入写出Person 类

public void test3() throws IOException, ClassNotFoundException {
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("o.dat")));
    java.lang.String a = new java.lang.String("我是中国人");
    objectOutputStream.writeObject(a);
    Person person = new Person(12, "王五");
    objectOutputStream.writeObject(person);
    objectOutputStream.close();
    ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("o.dat")));
    java.lang.String o = (java.lang.String)objectInputStream.readObject();
    Person person1 = (Person) objectInputStream.readObject();
    System.out.println(o);
    System.out.println(person1.toString());
    objectInputStream.close();
}

 11 随机存取(在指定位置插入数据)

public void test4() throws IOException {
    RandomAccessFile rw = new RandomAccessFile("hello1.txt", "rw");
    rw.seek(3);
    StringBuffer stringBuffer = new StringBuffer((int) new File("hello1.txt").length());
    int len = 0;
    byte[] b = new byte[20];
    while( (len = rw.read(b))!= -1 ){
        stringBuffer.append(new java.lang.String(b,0,len));
    }
    rw.seek(3);
    rw.write("wxyz".getBytes());
    rw.write(stringBuffer.toString().getBytes());
    rw.close();
}

 

posted @ 2022-04-27 20:24  写代码的小哥哥  阅读(24)  评论(0)    收藏  举报