zoukankan      html  css  js  c++  java
  • 《Java基础知识》Java IO流详解

    Java IO概念

    1. 用于设备之间的数据传输。

    2. Java 将操作数据流的功能封装到了IO包中。

    3. 数据流流向分:输入流和输出流,操作对象为文件。

    4. 流按照操作数据分:字节流(通用)和字符流。

    5. 将计算机语言:二进制数据转换成文件显示到电脑上。

    IO包:继承关系图:

    字符流:

    Reader :读取字符流,方法见API。

    Writer :写入字符流,方法见API。

    案例(Writer ):

    import java.io.*;
    
    public class var {
        public static void main(String[] agrs){
            Writer writer = null;
            try{
                writer = new FileWriter("Demo.txt");
    // writer = new FileWriter("Demo.txt",true); 文件续写功能,否则会覆盖。 writer.write(
    "今天天气真好!"); writer.flush(); } catch (IOException e) { e.printStackTrace(); }finally { if(writer != null){ try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    运行结果:

    案例(Reader):

    文件数据:

    import java.io.*;
    
    public class var {
        public static void main(String[] agrs){
            Reader reader = null;
            try{
                reader = new FileReader("Demo.txt"); 
                char[] arr = new char[5];
                int red = reader.read(arr); //red是装到数组的长度。
                while(red != -1 ){
                    System.out.println(new String(arr,0,red));
                    red = reader.read(arr);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(reader != null){
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行结果:

    实现一个完整的文件复制。

    import java.io.*;
    
    public class var {
        public static void main(String[] agrs){
            Reader reader = null;
            Writer writer = null;
            try{
                reader = new FileReader("Demo.txt");
                writer = new FileWriter("Dome1.txt"); //
                char[] arr = new char[5];
                int red = 0; //red是装到数组的长度。
                while((red = reader.read(arr)) != -1 ){
                    writer.write(new String(arr,0,red));
                    writer.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(reader != null){
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(writer != null){
                    try {
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行结果:

    优化文件复制案例(缓冲流):

    import java.io.*;
    
    public class var {
        public static void main(String[] agrs){
            BufferedReader bufferedReader = null; //缓冲读取流
            BufferedWriter bufferedWriter = null; //缓冲写入流
            try{
                bufferedReader = new BufferedReader(new FileReader("Demo.txt"));
                bufferedWriter = new BufferedWriter(new FileWriter("Dome2.txt"));
                String str ;
                while((str = bufferedReader.readLine()) != null ){
                    bufferedWriter.write(str);
                    bufferedWriter.newLine();   //换行。
                    bufferedWriter.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(bufferedReader != null){
                    try {
                        bufferedReader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(bufferedWriter != null){
                    try {
                        bufferedWriter.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行结果:

    上述IO无法处理视频,图片等一些文件,拷贝出来的文件也无法打开,由此我们引出字节流。

    字节流:

    OutputSteam:写入字节流,方法见API。

    InputSteam: 读取字节流,方法见API。

    案例(OutputSteam):

    public class var {
        public static void main(String[] agrs){
            FileOutputStream fileOutputStream = null;
            try {
                fileOutputStream = new FileOutputStream("demo.txt");
                fileOutputStream.write("今天天气真好,我们去玩吧!".getBytes());
                //不需要刷新。
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fileOutputStream != null){
                    try {
                        fileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行结果:

     案例(InputSteam):

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class PublicTest {
        public static void main(String[] args) {
            FileInputStream fileInputStream = null;
            try {
                fileInputStream = new FileInputStream("demo.txt");
                int ch =0;
                byte[] arr = new byte[fileInputStream.available()];  //正式写代码不要使用fileInputStream.available(),因为文件比较大的时候内存会不够用。
                while((ch = fileInputStream.read(arr)) != -1){
                    System.out.println(new String(arr,0,ch));
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(fileInputStream != null){
                    try {
                        fileInputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行结果:

    案例:复制一个视频文件

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class PublicTest {
        public static void main(String[] args) {
            FileOutputStream fileOutputStream = null;
            FileInputStream fileInputStream = null;
            try {
                fileInputStream = new FileInputStream("video.avi");
                fileOutputStream = new FileOutputStream("video1.avi");
                int ch =0;
                byte[] arr = new byte[fileInputStream.available()];  //正式写代码不要使用fileInputStream.available(),因为文件比较大的时候内存会不够用。
                while((ch = fileInputStream.read(arr)) != -1){
                    fileOutputStream.write(arr);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(fileInputStream != null){
                    try {
                        fileInputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(fileOutputStream != null){
                    try {
                        fileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行结果:

    转换流(键盘输入和控制台输出作为案例):

    import java.io.*;
    
    public class var {
        public static void main(String[] agrs){
            OutputStream out = System.out;  //控制台打印
            OutputStreamWriter outputStreamWriter = null;
            outputStreamWriter = new OutputStreamWriter(out);  // outputStreamWriter = new OutputStreamWriter(out,"GBK");  可以指定写的编码
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
    
            InputStream in = System.in;   //键盘输入流。
            InputStreamReader inputStreamReader = new InputStreamReader(in); // InputStreamReader inputStreamReader = new InputStreamReader(in,"BGK"); 同样可以指定编码
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            try {
                String line = null;
                while((line = bufferedReader.readLine()) != null){
                    if("exit".equals(line)){
                        break;
                    }
                    bufferedWriter.write(line);
                    bufferedWriter.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(bufferedWriter != null){
                        bufferedWriter.close();
                    }
                    if(bufferedReader != null){
                        bufferedReader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    运行结果:

    IO流先讲到这里,Java IO流还有很多有意思的类和方法见API。

    参考:https://www.cnblogs.com/runningTurtle/p/7088125.html

     
    This moment will nap, you will have a dream; But this moment study,you will interpret a dream.
  • 相关阅读:
    RAID
    变量的内存位置
    OSI网络结构的七层模型 TCP/IP层次模型
    IT公司【应聘】
    ajax的一个最简单例子
    优先级反转问题
    问一道算法题:算出这些直线一共有多少个交点
    一个女研究生(高级测试工程师)的职业选择 ZZ
    使用SWIG实现C/C++与其他语言间的互相调用 zz
    创建系统级热键 C++ builder为例
  • 原文地址:https://www.cnblogs.com/jssj/p/11487214.html
Copyright © 2011-2022 走看看