Java的基础知识5——流

本文介绍了Java中的流分类,包括输入流、输出流、字节流、字符流、节点流和处理流。重点讲解了字节流中的OutputStream和InputStream,字符流中的Writer和Reader,以及DataInputStream和DataOutputStream的功能。此外,还提到了PrintWriter和PrintStream的特性,并给出了例如FileInputStream、FileOutputStream、BufferedReader和BufferedWriter等常见流的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、流的分类:
按数据流的方向不同可以分为输入流和输出流
按处理数据单位不同可以分为字节流和字符流
按功能不同可以分为节点流和处理流

2、

\字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

在Java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使OutputStream完成,输入使用的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。这四个都是抽象类。

3、DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的结点流上。DataInputStream 和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:int,double等)的方法。

4、PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
PrintWriter和PrintStream有自动flush功能。

下面是一些简单的示例。
FileInputStream、FileOutputStream

import java.io.*;

public class Test{

    public static void main(String args[]){
        FileInputStream in = null;
        FileOutputStream out = null;
        int b;
        try{
            in = new FileInputStream("e:\\java\\Input.java");
            out = new FileOutputStream("e:/java/Output.java");          
        }catch(FileNotFoundException e){
            System.out.println("文件没有找到!");
            System.exit(-1);
        }

        try{
            while((b = in.read()) != -1){
                out.write(b);
            }
            in.close();
            out.close();
        }catch(IOException e){
            System.out.println("文件复制失败!");
            System.exit(-1);
        }
        System.out.println("文件已复制。");
    }
}

FileReader、FileWriter

import java.io.*;

public class Test {

    public static void main(String args[]) {
        FileReader in = null;
        FileWriter out = null;
        int b;
        try {
            in = new FileReader("e:\\java\\Input.java");
            out = new FileWriter("e:/java/Output.java");
            while ((b = in.read()) != -1) {
                out.write(b);
            }
            in.close();
            out.close();
        } catch (FileNotFoundException e) {
            System.out.println("文件没有找到!");
            System.exit(-1);
        } catch (IOException e) {
            System.out.println("文件复制失败!");
            System.exit(-1);
        }
        System.out.println("文件已复制。");
    }
}

BufferedWriter、BufferedReader

import java.io.*;

public class Test {

    public static void main(String args[]) {
        try {
            String s = null;
            BufferedWriter bw = new BufferedWriter(new FileWriter("e:/java/Output.java"));
            BufferedReader br = new BufferedReader(new FileReader("e:/java/Output.java"));
            for(int i=0;i<10;i++){
                bw.write(String.valueOf(Math.random()));
                bw.newLine();
            }
            bw.flush();
            while((s = br.readLine()) != null){
                System.out.println(s);
            }           
            bw.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }       
    }
}

OutputStreamWriter、InputStreamReader

import java.io.*;

public class Test {

    public static void main(String args[]) {
        OutputStreamWriter osw = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        int b = 0;
        String s = null;
        try {
            osw = new OutputStreamWriter(new FileOutputStream("e:/java/Output.java"));
            osw.write("Fern");
            System.out.println(osw.getEncoding());
            osw.flush();
            osw = new OutputStreamWriter(new FileOutputStream("e:/java/Output.java",true),"ISO8859_1");
            osw.write("\ngood girl");
            System.out.println(osw.getEncoding());
            osw.flush();
            osw.close();

            isr = new InputStreamReader(new FileInputStream("e:/java/Output.java"));
            while((b = isr.read()) != -1){
                System.out.print((char)b);
            }
            isr = new InputStreamReader(System.in);
            br = new BufferedReader(isr);
            s = br.readLine();
            while(s != null){
                if(s.equalsIgnoreCase("exit")){
                    System.out.println("退出程序。");
                    break;
                }
                System.out.println(s.toUpperCase());
                s = br.readLine();
            }
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件没有找到。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ByteArrayOutputStream、ByteArrayInputStream、DataOutputStream、DataInputStream

import java.io.*;

public class Test {

    public static void main(String args[]) {

        ByteArrayOutputStream baos = null;
        DataOutputStream dos = null;
        ByteArrayInputStream bais = null;
        DataInputStream dis = null;
        try {
            baos = new ByteArrayOutputStream();
            dos = new DataOutputStream(baos);
            dos.writeDouble(Math.random());
            dos.writeBoolean(false);
            dos.writeChar(65);
            dos.flush();

            bais = new ByteArrayInputStream(baos.toByteArray());
            dis = new DataInputStream(bais);
            System.out.println(dis.available());
            System.out.println(dis.readDouble());
            System.out.println(dis.readBoolean());
            System.out.println(dis.readChar());

            dos.close();
            dis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

PrintStream

import java.io.*;

public class Test {

    public static void main(String args[]) {

        FileOutputStream fos = null;
        PrintStream ps = null;

        try {
            fos = new FileOutputStream("e:/java/Output.java");
            ps = new PrintStream(fos);
            if(ps != null){
                System.setOut(ps);
            }
            for(int i=1;i<=100;i++){
                System.out.print(i + " ");
                if(i%20 == 0){
                    System.out.println();
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

PrintWriter

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

public class Test {

    public static void main(String args[]) {

        InputStreamReader isr = null;
        BufferedReader br = null;
        String s = null;
        FileWriter fw = null;
        PrintWriter pw = null;

        try {
            isr = new InputStreamReader(System.in);
            br = new BufferedReader(isr);
            br = new BufferedReader(isr);
            fw = new FileWriter("e:/java/Output.java",true);
            pw = new PrintWriter(fw);
            while((s=br.readLine()) != null){   
                if(s.equalsIgnoreCase("exit")){
                    break;
                }
                pw.write(s);
                pw.println();
            }
            pw.write("------"+new Date()+"------");
            br.close();
            pw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ObjectOutputStream、ObjectInputStream

import java.io.*;

public class Test {

    public static void main(String args[]) {
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        FileInputStream fis = null;
        ObjectInputStream ois = null;

        try {
            Student s = new Student(110,"小蝶",18,'女');
            fos = new FileOutputStream("e:/java/Output.java");
            oos = new ObjectOutputStream(fos); 
            oos.writeObject(s);
            oos.flush();
            oos.close();

            fis = new FileInputStream("e:/java/Output.java");
            ois = new ObjectInputStream(fis);
            s = (Student)ois.readObject();
            System.out.println("学号:"+s.id+"\n姓名:"+s.name+"\n年龄:"+s.age+"\n性别:"+s.sex);
            ois.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class Student implements Serializable{
    int id;
    String name;
    int age;
    char sex;

    public Student(int id,String name,int age,char sex){
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}

如果要往文件中存储和读取多个对象的时候,可以使用下面的方法。(将多个对象存入数组中)

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;

public class Test5 {

    public static void main(String args[]) {
        try {
            ArrayList<Student> arrayOut = new ArrayList<Student>();
            arrayOut.add(new Student(110,"Fern",18));
            arrayOut.add(new Student(111,"Mike",29));
            arrayOut.add(new Student(112,"Jack",78));

            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e:/java/Output.java"));
            oos.writeObject(arrayOut);
            oos.flush();
            oos.close();

            ArrayList<Student> arrayIn = null;
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e:/java/Output.java"));
            arrayIn = (ArrayList<Student>)ois.readObject();
            ois.close();
            Iterator<Student> i = arrayIn.iterator();
            Student temp = null;
            while(i.hasNext()){
                temp = i.next();
                System.out.println(temp);
            }       
            System.out.println("\n第二种打印的方式(增强的for循环).\n");
            for(Student s:arrayIn){
                System.out.println(s);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class Student implements Serializable{

    int id;
    String name;
    int age;

    Student(int id,String name,int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String toString(){
        return("学号:"+this.id+"      姓名:"+this.name+"        年龄:"+this.age);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值