编程语言
首页 > 编程语言> > Java IO流

Java IO流

作者:互联网

Java IO流

什么是IO?

就是Input和Output,通过IO可以完成硬盘文件的读和写。

输入(Input)、读(Read)、输入流(InputStream):从硬盘到内存中。

输出(Output)、写(Write)、输出流(OutputStream):从内存到硬盘中。

IO流的分类

以内存作为参照物,按照流的方向分类:

按照读取数据的不同进行分类:

IO流的类型

四个分支:

java.io.InputStream 字节输入流

java.io.OutputStream 字节输出流

java.io.Reader 字符输入流

java.io.Writer 字符输出流

以上都是抽象类,都实现了Closeable接口。

结论:以”Stream“结尾的都是字节流,以”Reader“和”Writer“结尾的都是字符流。

用完了流:一定要用close关闭流。

输出流都实现了Flushable接口,都是可刷新的。所以在输出流最终输出之后,一定要使用flush()对管道进行清空管道。

流的具体类型

文件专属

FileInputStream

FileOutputStream

FileReader

FileWriter

转换流(将字节流转换成字符流):

InputStreamReader

OutputStreamWriter

缓冲流

BufferedReader

BufferedWriter

BufferedInputStream

BufferedOutputStream

数据流专属

DataInputStream

DataOutputStream

标准输出流

PrintWriter

PrintStream

对象专属流

ObjectInputStream

ObjectOutputStream

字节输入流FileInputStream

将磁盘文件以字节方式读入内存(即程序中使用)中。

构造方法:

常用方法:

代码如下:

public static void main(String[] args) {

    FileInputStream in = null;
    try {
        in = new FileInputStream("C:\\Users\\Administrator\\Desktop\\实验.txt");
        int data = 0;
        while ((data=in.read()) != -1){
            //in.read()方法返回的是int类型,返回的为字节的ascii码,如果没有字节则返回-1
            System.out.println(data);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        //防止输入流为空。只有不为空时才可以关闭
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

注意:IDEA默认路径是工程的根路径

使用byte数组读取

public class IOTest02 {
    public static void main(String[] args) {

        FileInputStream in = null;
        try {
            in = new FileInputStream("C:\\Users\\Administrator\\Desktop\\实验.txt");
            byte[] bytes = new byte[4];
            int dataCount = 0;
            while ((dataCount=in.read(bytes)) != -1){
                //dataCpunt为byte数组读取到的字节数,有多少个输出多少个
                System.out.print(new String(bytes,0,dataCount));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //防止输入流为空。只有不为空时才可以关闭
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

字节输出流FileOutputStream

构造方法:

常用方法:

代码如下:

public static void main(String[] args) {
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("myfile",true);
//            byte[] bytes = {97,98,99};
            String str  = "噼里啪啦";
            byte[] bytes = str.getBytes();
            out.write(bytes);

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

复制

利用输入输出流进行复制

代码如下:

public static void main(String[] args) {
    FileInputStream in = null;
    FileOutputStream out = null;
    byte[] bytes = new byte[1024*1024];
    try {
        in = new FileInputStream("E:\\team work\\主方程建模\\主方程运算.pdf");
        out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\主方程运算.pdf");
        int dataCount = 0;
        while((dataCount = in.read(bytes))!=-1){
            out.write(bytes,0,dataCount);
        }

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

字符输入流FileReader

将磁盘文件以字符方式读入内存(即程序中使用)中。只能读取文本文件。

构造方法:

常用方法:

``

public static void main(String[] args) {
    FileReader reader = null;
            try {
        reader = new FileReader("C:\\Users\\Administrator\\Desktop\\实验.txt");
        char[] c = new char[1024*512];//1MB
        int dataCount = 0;
        while((dataCount = reader.read(c))!=-1){
            System.out.print(new String(c,0,dataCount));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
}

字符输入流FileWriter

构造方法:

常用方法:

复制:通过字符流复制,只能对文本文件进行复制。

标签:文件,Java,字节,int,printStackTrace,IO,catch,String
来源: https://www.cnblogs.com/fkddb/p/16526674.html