• java学习笔记 OutputStream与InputStream


    流是用来读写传输数据的,输入和输出是对程序本身而言的,但程序需要读入数据用读入流,程序需要将数据输出保存起来用输出流。

    流相当于各种不同的管道来传输数据。按读入和输出分为输入流和输出流。按传输的类型分为字节流和字符流。按管道与管道的关系又可分为节点流与处理流。

    字节流中输出使用OutputStream类输入使用InputStream类。

    在java中流的操作分为下面4个步骤:

    1. 使用File类打开一个文件
    2. 通过流的子类来指定位置
    3. 进行输入或输出操作
    4. 关闭输入/输出

    字节流

    字节输出流:OutputStream

    OutputStream类是抽象类,其子类FileOutputStream

    向一个文件中写入字符串:

    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.FileOutputStream;
    
    public class Test {
        public static void main(String[] args) {
            try {
                //在io.txt中写入Hello Word!
                OutputStream fos = new FileOutputStream("e:\java\io.txt");//FileOutputStream的FileOutputStream(String name)构造方法
                //(FileOutputStream fos = new FileOutputStream(f);String str = "e:\java\io.txt";File f = new File(str);)
                String str = "Hello Word!";
                byte b[] = str.getBytes();//Byte 还是byte?@getBytes
                //将一个数组直接写入文件当中
                fos.write(b);
                /*
                //通过循环把每一个字节写入文件中
                for(int i = 0;i < b.length;i++) {
                    fos.write(b[i]);    
                }
                */
                fos.close();
            }catch(IOException e) {
                e.printStackTrace();    
            }
        try {
                //在io.txt中追加写入Hello Word!
                OutputStream fos = new FileOutputStream("e:\java\io.txt",true);//FileOutputStream的FileOutputStream(String name, boolean append)构造方法
                String str = "
    Hello Word!";// 
    归位转义字符的用法?
                byte b[] = str.getBytes();
                fos.write(b);//最后文件写入两行Hello Word!
                fos.close();
            }catch(IOException e) {
                e.printStackTrace();    
            }    
        }    
    }

    r1

    字节输入流InputStream

    InputStreamStream是抽象类,其子类FileInputStream

    从文件中读取类容

    import java.io.File;
    import java.io.IOException;
    import java.io.FileInputStream;
    
    public class Test {
        public static void main(String[] args) {
            try{
                FileInputStream in = new FileInputStream("e:\java\io.txt");
                int b;
                while((b = in.read()) != -1) {
                    System.out.print((char)b);    
                } 
                in.close();   
            }catch(IOException e) {
                e.printStackTrace();
            }
        }    
    }

    r2

    以数组的形式读取类容

    import java.io.File;
    import java.io.IOException;
    import java.io.FileInputStream;
    
    public class Test {
        public static void main(String[] args) {
            try{
                  //读取1KB内容
                FileInputStream in = new FileInputStream("e:\java\io.txt");
                byte b[] = new byte[1024];//读入1KB;
                in.read(b);
                in.close();
                System.out.print("读入内容:
    " + new String(b));   
            }catch(IOException e) {
                e.printStackTrace();
            }
            System.out.println(" ");
            try{
                  //读取指定文件字节个内容
                FileInputStream in = new FileInputStream("e:\java\io.txt");
                File f = new File("e:\java\io.txt");
                int a = (int)f.length();//public long length()
                byte b[] = new byte[a];
                in.read(b);
                in.close();
                System.out.print("读入内容:
    " + new String(b));   
            }catch(IOException e) {
                e.printStackTrace();
            }
            
        }    
    }
    
    /*
    1.数据存储单位大小:
        1 Byte = 8 Bits
        1 KB = 1024 Bytes
        1 MB = 1024 KB
        1 GB = 1024 MB
    2.byte b[] = new byte[a]中开辟空间的大小必须使用int类型的。不能用double类型。
    */

    r3

    复制文件内容

    import java.io.File;
    import java.io.IOException;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    public class Test {
        public static void main(String[] args) {
            //可以读取.java类型文件,下面是两种路径写法
            String str1 = "e:" + File.separator + "java" + File.separator + "pkg1" + File.separator + "Test.java";//String str = "e:\java\pkg1\Test.java";
            try {
                File f1 = new File(str1);    
                FileInputStream fis = new FileInputStream(f1);
                int b;
                while((b = fis.read()) != -1) {
                    System.out.print((char)b);
                }    
                //是否应该关闭这个流?@应该的
                fis.close();
            }catch(IOException e) {
                e.printStackTrace();    
            }
            
            //把上个文件按字节流形式复制到另一文件
            try {
                String str2 = "e:\java\pkg1\aaa.txt";//如果这个路径文件夹不存在  能否自己创建?@不能自己创建
                //String str2 = "e:\java\AAAA\aaa.txt";
                File f1 = new File(str1);    
                File f2 = new File(str2);    
                FileInputStream fis = new FileInputStream(f1);
                FileOutputStream fos = new FileOutputStream(f2);
                int b;
                while ((b = fis.read()) != -1) {
                    fos.write(b);    
                }
                fis.close();fos.close();
            }catch (IOException e) {
                e.printStackTrace();    
            }
        }
    }    
    
    /*
    1.所有的异常都需要引用import,例如上面的import java.io.IOException
    2.main主方法不应该抛异常,试想main方法已经是最后一个方法了
    3.流进行读写操作之后应该关闭,例如fis.close()
    */
    r4

    在屏幕上中文并不能正确显示

    r5

    实际文件可以正确复制

  • 相关阅读:
    PAT 甲级 1002 A+B for Polynomials (25 分)
    数字提取——C语言
    粒子动画——Pygame
    李白打酒——C++
    C语言输出格雷码
    特殊篮子问题——C语言暴力破解
    黑白迷宫问题——深度优先搜索算法
    最近素数问题——C语言
    巧克力分配问题——C语言
    离散数学——逻辑推理系统
  • 原文地址:https://www.cnblogs.com/yhwsy/p/5749078.html
Copyright © 2020-2023  润新知