关于Java中流的学习

  1. 流的分类

    输入流和输出流是以内存为参照物的,读入内存是输入流,内存中存到硬盘叫输出流。
    输入流 :把数据从其他设备上读取到内存中的流。
    输出流 :把数据从内存 中写出到其他设备上的流。
    
    按照读取或写入数据方式不同分为字节流和字符流。
    字节流 :以字节为单位,读写数据的流。
    字符流 :以字符为单位,读写数据的流。
    
    我们必须明确一点的是,一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。
    

Java中所有的流都是在java.io包中,有四大类,这四个都是抽象类。
字节输入流:java.io.InputStream
字节输出流:java.io.OutputStream
字符输入流:java.io.Reader
字符输出流:java.io.Writer
(Stream结尾的是字节流,Reader和Writer结尾的都是字符流)
所有的流都实现了closeable()接口用完的时候要记得close(),所有的输出流都实现了flushable()接口。用完的时候要flush()刷新一下。

2.要掌握的16个流
注意:IDEA默认的当前路径是工程Project的根目录
文件专属:
java.io.FileInputStream:万能的,任何类型的文件都可以读。
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter

转换流:
java.io.InputStreamReader
java.io.OutputStreamWriter

缓冲流:
java.io.BufferedInputStream
java.io.BufferedOutputStream
java.io.BufferedReader
java.io.BufferedWriter

数据流:
java.io.DataInputStream
java.io.DataOutputStream

标准输出流:
java.io.PrintStream
java.io.PrintWriter

对象专属流:
java.io.ObjectInputStream
java.io.ObjectOutputStream

package IO;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;

public class Test01_FileInputStream {
    public static void main(String[] args) {
        FileInputStream inputStream = null;
        try {
            //inputStream = new FileInputStream("src/static/1.txt");
            //read方法,依次读取一个字节,返回值是这个字节的ascii值
            // 读完了之后返回的-1。
            //int a = inputStream.read();
            //System.out.println(String.valueOf((char)a));


            /**
             * read方法可以传入一个byte数组,读取文件中的内容到这个数组中,
             * 返回值是读取到的字符个数。
             * 建议使用这种方式读取,这样可以减少读取的次数,上面那种方法读取次数太多很耗时。
             */
            /**
             * 这种读取方式不太合适,只是用来测试,实际中,我们不知道问价的字符个数,所以实际上要循环读取
             * 中间要做判断什么时候结束。
             */
//            inputStream = new FileInputStream("src/static/2.txt");
//            byte[] bytes = new byte[250];
//            int a = inputStream.read(bytes);
            //System.out.println(a);
            //new String()可以传入一个byte数组,后面还可以在跟两个参数,不跟的话默认是
            //全部转换成字符串,跟的第一个参数是起始下标,后面一个是转换多少个字符
            //System.out.println(new String(bytes,0,a));

            //available()方法返回这个流当中未读取的字节数量
            //skip方法表示跳过几个字节不读,这个会导致available()返回值减小
            inputStream = new FileInputStream("src/static/2.txt");
            System.out.println(inputStream.available());
            inputStream.skip(2);
            System.out.println(inputStream.available());

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

package IO;

import java.io.FileOutputStream;
import java.io.IOException;

public class Test02_FileOutputStream {
    public static void main(String[] args) {
        FileOutputStream outputStream= null;

        try {
//            outputStream = new FileOutputStream("src/static/3.txt");
            outputStream = new FileOutputStream("src/static/3.txt",true);
            byte[] bytes = new byte[5];
            for (Byte i = 0; i < bytes.length; i++) {
                bytes[i]=(byte) (i+97);
            }

            /**
             * 文件字节输出流的write方法,后面参数可以是一个byte数组,
             * 但是这个write方法要注意会根据你这个流的属性选择
             * 先清空原来的文件中的内容还在直接追加
             *
             */
            //outputStream.write(bytes);

            outputStream.write(bytes);

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

package IO;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test03_FileCopy {
    public static void main(String[] args) {
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;

        try {
            inputStream = new FileInputStream("src/static/1.txt");
            outputStream = new FileOutputStream("src/static/4.txt");

            byte[] bytes = new byte[1024];
            int a =0;
            try {
                while (a!=-1){
                    a = inputStream.read(bytes);
                    outputStream.write(bytes,0,a);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }


            try {
                outputStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (outputStream!=null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

package IO;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test04_FileReader {
    public static void main(String[] args) {
        /**
         * 字符输入流,专门用来读取文本文件的
         */

        FileReader reader = null;
        char[] chars = new char[1024];
        int a = 0;

        try {
             reader = new FileReader("D:\\word文档\\电子版练习册\\JAVA\\00-JAVA基础\\project\\src\\static/1.txt");

            try {
                while ((a=reader.read(chars))!=-1){

                    System.out.print(new String(chars,0,a));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

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

package IO;

import java.io.FileWriter;
import java.io.IOException;

public class Test05_FileWriter {
    public static void main(String[] args) {
        FileWriter writer = null;

        try {
            writer = new FileWriter("src/static/5.txt",true);
            writer.write("你好,世界!");

            writer.flush();

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

    }
}

package IO;

import java.io.BufferedReader;
import java.io.FileReader;

public class Test06_BufferedReader {
    public static void main(String[] args) throws Exception{
        /**
         * 被传进去的流叫做节点流,外边的流是包装流也叫做处理流
         * 关闭的时候,我们只需要关闭最外层的流,里面的节点流会自动关闭。
         *
         */
        /**
         * readLine()依次读取一行,读完的时候返回null
         * 注意细节:它读的时候没有读到换行符
         */
        BufferedReader reader = new BufferedReader(new FileReader("src/static/1.txt"));
        String s;
        while ((s=reader.readLine())!=null)
        System.out.println(s);
    }
}

package IO;

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

public class Test07_OutputStreamWriter {
    public static void main(String[] args) throws Exception{
        //BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src/static/6.txt")));
        BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src/static/6.txt",true)));
        writer.write("输出字节流转换成字符输出流");
        writer.flush();
        writer.close();
    }
}

package IO;

import java.io.DataOutputStream;
import java.io.FileOutputStream;

public class Test08_DataOutputStream {
    public static void main(String[] args) throws Exception{
        /**
         * 数据专属的输出流,这个流输出的不是普通文件,
         * 不但能写入数据,而且能写入数据的数据类型
         * 读取的时候怎么加的怎么取,顺序不能错,不然也会出错
         */
        DataOutputStream stream = new DataOutputStream(new FileOutputStream("src/static/7.txt"));

        stream.write((byte) 97);
        stream.write(1);
        stream.writeBytes("你好");


        stream.flush();
        stream.close();

    }
}

package IO;

import java.io.FileOutputStream;
import java.io.PrintStream;

public class Test09_PrintStream {
    public static void main(String[] args) throws Exception {
        /**
         * 标准输出流,不需要关闭
         */
        PrintStream stream = System.out;
        stream.println("nihao");

        stream.println("sss");

        /**
         * 日志框架的实现原理
         */
        PrintStream stream1 = new PrintStream(new FileOutputStream("src/static/8.txt"));
        System.setOut(stream1);
        stream = System.out;
        stream.println("Hello World!");
    }
}

package IO;

import java.io.File;
import java.io.IOException;

public class Test10_File {
    public static void main(String[] args) {
        File file = new File("src/static/9.txt");
        boolean exist;
//        判断文件存不存在
        exist = file.exists();
        //判断是否是一个文件
        exist = file.isFile();


        System.out.println(exist);
//        if (!exist){
//            file.mkdir();
//            try {
//                System.out.println(file.createNewFile());
//                System.out.println("创建了一个文件");
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }

    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北海冥鱼未眠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值