zoukankan      html  css  js  c++  java
  • 1、InputStream

    在Java中inputStream是字节输入流,用来将文件中的数据读到Java程序中。

    InputStream是所有字节输入流的顶层父类,是一个抽象类。要用的话,需要是用子类。

    最常用的子类:FileInputStream

    构造方法:

    FileInputStream(File file)传递一个File类型的文件。

    FileInputStream(String name)传递一个string类型的文件路径

    其他方法:

    int read():从文件中读取一个字节数的数据。并返回读取到这个字节。如果读取结束,返回的是-1;

    int read(byte【】 b)一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数,如果读取结束,返回-1

    void close

    使用步骤:

    1、创建一个FileInputStream流对象,绑定一个数据源对象。

    2、调用read方法读取数据

    3、释放资源。

    这种方式,不能读取中文,一个占多个字节,读取一个字节会把中文拆开读。

    public class Demo01InputStream {
        public static void main(String[] args) throws IOException {
            //创建一个FileinputStream对象,并绑定一个数据源文件
            // 如果文件不存在,则会抛出异常(File not fount excep)
            FileInputStream fis = new FileInputStream("E:\a.txt");
            //调用read方法读取数据
            // int read​(): 从文件中读取一个字节数的数据。并返回读取到的这个字节。 如果读取结束,返回的是-1.
            int i;
            while ((i = fis.read()) != -1) {
               /*
                    条件做了下面的事情
                    1. 通过fis输入流调用read方法,读取一个字节。
                    2. 把读取到的这个字节赋值给变量i。
                    3. 判断i是否不等于-1,如果不是-1表示读取到了内容,就在循环中对读取到的内容进行处理。
                    读取到的内容在i里面保存*/
                System.out.print((char) i);
    
    
            }
            //释放资源demo02_inputsteam
    
        }
    }
    
            使用字节输入流一次读取一个字节数组。
            int read​(byte[] b): 一次读取一个字节数组,
            输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束返回-1.
            这种读取方式效率高
            */
    public class Demo02InputStream {
        public static void main(String[] args) throws IOException {
            //创建Fileinptstream 流对象,并绑定源文件
            FileInputStream fis=new FileInputStream("E:\a.txt");
            //调用read方法读取数据.
            //        // int read​(byte[] b): 一次读取一个字节数组
            // 会将数据读取到字节数组里面。 字节数组长度是几,那么就最多一次读取几个。 并
            // 且返回读取到的个数,读取结束,返回-1
            //
            //        //使用循环,一次读取一个字节数组
            //        //定义一个字节数组,用来保存读取到的数据。
    
            byte arr[]=new byte[3];
            //定义一个变量来保存读到的个数
            int len;//返回读取到的个数
            //使用循环开始读取
            while((len=fis.read(arr))!=-1){
                /*
                上面条件作了下面的事情:
                1. 通过字节输入流fis调用read方法,将数据读取到Arr这个字节数组中
                2. 将读取到的有效个数返回,赋值给len。
                3. 判断len是否不等于-1,如果不等于-1,表示读取到了内容,就就在循环中进行处理.
                        读取出来的数组在bArr数组中放着
                        */
                //最后一次读取可能会有上次残留的数据,所以不能把字节数组的整体都转成String
                //System.out.println(new String(bArr));
    
                //读取到了几个内容,就把字节数组的几个元素转成字符串,并且打印
                System.out.println(new String(arr,0,len));
    
    
    
            }
    
        }
    }
    
       文件复制。
    
        文件复制其实就是一边读,一边写,每读取一次就把读取到的内容写到文件中。
        为了保证复制效率,我们采用一次读取一个字节数组的方式进行复制
    
        思路:
            1. 创建字节输入流对象,用来读取
            2. 创建字节输出流对象,用来写入。
            3. 开始读取,一次读取一个字节数组。
            4. 把读取到的字节数组的内容写入到目的地文件
            5. 循环 第3步 和 第4步
            6. 释放资源
     */
    public class Demo03Copy {
        public static void main(String[] args) throws IOException {
            //1. 创建字节输入流对象,用来读取
            FileInputStream fis = new FileInputStream("E:\a.txt");
            //2创建字节输出流对象,用来写入//没有会创建
            FileOutputStream fs = new FileOutputStream("zhongguo");
            //3创建一个数组用来读取
            byte arr[] = new byte[1024 * 8];
            int len;//用来计数
            while ((len = fis.read(arr)) != -1) {
                //从文件中用字节数组读取数组,存储到字节数组中
    //            每读取到一个内容,就把读取到的内容写入到目的地文件
                fs.write(arr,0,len);
    
            }
            //释放资源
            fs.close();
            fis.close();
    
        }
    
    }
  • 相关阅读:
    无缝轮播图
    瀑布流之ajax
    进阶版轮播图
    桌面特效
    3D模型文字动画
    Razor 常用方法
    easyui常用
    C#
    Redis设置记录
    日志三剑客ELK
  • 原文地址:https://www.cnblogs.com/xiangyucc/p/13729091.html
Copyright © 2011-2022 走看看