JAVA IO流

r我们对习IO流做一个简单的总结:

大致流程图如下

JAVA IO流_第1张图片

以上图片是我们这张知识的大致流程

接下来我们用代码演示其中的操作,我大致的将红色的给写一下,其他的大家在下面进行操作

InputStream的操作演示

public class InputStreamDemo2 {
    public static void main(String[] args) {
        InputStream inputStream = null;

        try {
            //创建对象
            inputStream = new FileInputStream("D:\\d1.txt");
            //传输数据
            int read = 0;
            //如果文件的数据未读取完毕,继续执行该循环
            while ((read = inputStream.read()) !=-1){
                //skip跳过并丢弃来自此输入流的 n字节数据
                //每个五个输出字母
               // inputStream.skip(5);
                System.out.println((char)read);
            }
//            int read = inputStream.read();
//            System.out.println((char) read);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

OutputStream的演示操作

public class OutputStreamDemo {
    public static void main(String[] args) {
        File file = new File("a2.txt");
        OutputStream outputStream = null;
        try {
            //创建对象
            outputStream = new FileOutputStream(file,true);
            //传输数据
            outputStream.write(98);
            outputStream.write("www.baidu.com百度".getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭对象
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

为了节约时间,我将FileInputStream和FileOutputStream进行一起的操作

/**
 * @Auther:Yuhai
 * @Date:2022/4/6-04-06-8:53
 * @Description:IntelliJ IDEA
 * @version:1.0
 *
 * 训练要点
 * – 理解输入流和输出流类的概念。 – 使用FileInputStream实现读取文本文件。 – 使用FileOutputStream实现向文本文件中写数据
 * ▪ 需求说明
 * – 文件“我的青春谁做主.txt”位于D盘根目录下,要求将此文件的
 * 内容复制到
 * – C:\myFile\myPrime.txt中
 *
 *
 * 题意大致是一个复制功能
 *
 * 无非是对之前知识的一个总结
 * 四步骤:
 *      选择合适的流
 *      创建对象
 *      传输数据
 *      关闭流对象
 */
public class FileOutputStreamTest {
    public static void main(String[] args) throws IOException {
        //现将值为空
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建字节输入流
            fis = new FileInputStream("D:\\我的青春谁做主.txt");

            //创建字节输出流
            fos = new FileOutputStream("d:\\io\\myPrime");

            //创建字节数据,方便存储
            byte [] b  = new byte[1024];
            int hasRead = 0;
            while ((hasRead = fis.read(b))>0){
                //每读取一次,即写入文件输入流,读了多少,就写多少
                //off是偏移值,即从这个地方开始
                fos.write(b,0,hasRead);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        fis.close();
        fos.close();
    }
}

printStream的操作演示


/**
 * @Auther:Yuhai
 * @Date:2022/4/12-04-12-8:32
 * @Description:IntelliJ IDEA
 * @version:1.0
 */
public class PrintStreamDemo {
    public static void main(String[] args) {

        try {
            PrintStream ps = new PrintStream(new FileOutputStream("a1.txt"));
            //看一下基本数据类型是否可以输出
            int i    =0;
            double f = 900.0;
            String str = "大家好,我是java小白";
            ps.print(i);
            ps .print(f);
            ps.print(str);
            ps.flush();

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

    }
}

Reader的演示操作(读取的功能)

/**
 * @Auther:Yuhai
 * @Date:2022/4/4-04-04-9:12
 * @Description:IntelliJ IDEA
 * @version:1.0
 *
 * 做一下内容无非是一下四步骤
 *          选择合适的流
 *          创建对象
 *          传输数据
 *          关闭对象中的流
 *
 *
 *          显然,这个查询速度比较慢,
 */
public class ReaderDemo {
    public static void main(String[] args)  {
        Reader reader  = null;
        try {
            //创建对象
            reader = new FileReader("a2.txt");

            int read = 0;
            while ((read = reader.read())!=-1){
                System.out.println((char)read);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭流对象
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

Wtiter的操作演示(写入的过程)


/**
 * @Auther:Yuhai
 * @Date:2022/4/12-04-12-8:48
 * @Description:IntelliJ IDEA
 * @version:1.0
 */
public class WriterDemo {
    public static void main(String[] args) {
        File file = new File("b5.txt");
        Writer writer = null;

        try {
            writer = new FileWriter(file,false);

            writer.write(100);
            writer.write("你好,世界");
            //append追加
            writer.append(",");
            writer.write( new char[]{'4','f','p'});
            writer.append('a').append('c').append('e');
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

InputStreamReader和OutputStreamWriter的操作演示(这是处理流,也是字节流和字符流得桥梁)

/**
 * @Auther:Yuhai
 * @Date:2022/4/7-04-07-20:43
 * @Description:IntelliJ IDEA
 * @version:1.0
 *
 *
 * 处理流之二:
 *          转换流的使用,
 *          1.转换流:属于字符流
 *          InputStreamReader:将一个字节输入流转换为字符的输入流
 *          OutputStreamWriter: 将一个字符的输出流转换为字节的输出流
 *
 *          2.作用:提供字节流和字符流的转换
 *
 *          3.解码:字节、字节数组-----》字符数组、字符串
 *          编码:字符数组、字符串-----》字节、字节数组
 *
 *          4.字符集
 *          ASCII:美国标准信息交换码
 *          用一个字节的7位也可以表示
 *          IS08859-1:拉丁码,欧洲码表
 *          用一个字节的8位表示
 *          GB2312:中国的中文编码表。最多两个字节编码的所有字符
 *          GBK:中国的中文编码表的升级,融合了更多的中文文字符号,最多两个字节编码
 *          Unicode: 国际标准码,融合了目前人类使用的所有字符。为每一个字符的分配唯一的字符码,所有的文件
 *          UTF-8: 变长的编码方式,可用1-4个字节来表示一个字符
 */
public class InputStreamReaderTest {

    /*
    此时处理异常,任然使用try-catch -finally
     */
    @Test
    public void test1() throws IOException {
        FileInputStream fis = new FileInputStream("D:\\HelloWord.txt");
//InputStreamReader isr = new InputStreamReader(fis);//使用默认的字符集
        //参数二指明了字符集,具体使用那个字符集,取决于文件的字符集
        InputStreamReader isr = new InputStreamReader(fis,"Utf-8");

        char[] chars = new char[20];
        int len;
        while ((len = isr.read(chars))!=-1){
            String str = new String(chars,0,len);
            System.out.println(str);
        }
        isr.close();
    }
    /*
        综合的使用InputStreamReader和OutputStreamWrite
     */
    @Test

    public void  test2() throws Exception {
        //造文件,造流
        File file1 = new File("D:\\d1.txt");
        File file2 = new File("D:\\di.txt");

        FileInputStream fis = new FileInputStream(file1);
        FileOutputStream fos = new FileOutputStream(file2);

        InputStreamReader isr =new InputStreamReader(fis,"UTF-8");
        OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");

        //读写过程
        char [] chars = new char[20];
        int len;
        while ((len =isr.read(chars))!=-1){
            osw.write(chars,0,len);
        }
        //关闭流对象,资源
    }

}

BufferedReader的操作演示

/**
 * @Auther:Yuhai
 * @Date:2022/4/9-04-09-21:18
 * @Description:IntelliJ IDEA
 * @version:1.0
 *
 *  BufferedReader的用法有一个ReadLine()读取一行文字的操作
 *
 */
public class BufferedReaderDemo {
    public static void main(String[] args) {
        FileReader fileReader = null;
        BufferedReader reader=null;

        try {
            fileReader = new FileReader("D:\\hi.txt");
            reader = new BufferedReader(fileReader);

            String str = "";
            while ((str = reader.readLine())!=null){
                System.out.println(str);

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
               reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

BufferedWriter的操作演示

/**
 * @Auther:Yuhai
 * @Date:2022/4/9-04-09-21:12
 * @Description:IntelliJ IDEA
 * @version:1.0
 *
 * 总结:
 *       bufferedWriter独有的方法换行newLine()
 */
public class BufferedWriteDemo {
    public static void main(String[] args) {
        FileWriter fileWriter = null;
        BufferedWriter bufferedWriter = null;

        try {
            fileWriter = new FileWriter("HelloWord.txt");
            bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(100);
            bufferedWriter.write("www.baidu.com百度");
            bufferedWriter.write("www.ailibab.com阿里巴巴".toCharArray());
            //写入一行
            bufferedWriter.newLine();
            bufferedWriter.write(97);
            bufferedWriter.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                bufferedWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

File的操作演示


/**
 * @Auther:Yuhai
 * @Date:2022/4/12-04-12-9:03
 * @Description:IntelliJ IDEA
 * @version:1.0
 */
public class FileWriterTest {
    public static void main(String[] args) {

        File file = new File("b2.txt");
        FileWriter fw = null;
        try {
            fw = new FileWriter(file);
        //创建字符缓冲区
            fw.write(100);//此时的100对应的是d
            fw.write("你好");
            //......
            fw.flush();
            fw.close();

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

FileReader的演示

/**
 * @Auther:Yuhai
 * @Date:2022/3/31-03-31-17:55
 * @Description:IntelliJ IDEA
 * @version:1.0
 */
//使用FileReader读取文件
public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        FileReader fis = null;
        try {
            //创建字节输入流
            fis = new FileReader("D:\\Program Files\\IDEA\\IntelliJ IDEA 2019.2.4\\build.txt");
            //创建一个长度为1024的竹简
            char[] b = new char[1024];
            //用于保存的实际字节数
            int hasRead = 0;
            //使用循环来重复取水的过程
            while ((hasRead = fis.read(b))>0){
                //取出竹简中的水滴(字节),将数组转换成字符串进型输出
                System.out.println(new String(b,0,hasRead));
            }
        }catch (IIOException | FileNotFoundException e ){
            e.printStackTrace();

        } finally {
            fis.close();
        }
    }
}

总结: 学这么多IO流类,其实他们的内容比较复杂,但是形式比较统一,无非是读和写,都是从前面四个抽象基类演变过来的。在我们实际应用中,使用IO流的时候,应当选择适合自己的流来进行操作。

你可能感兴趣的:(笔记,java)