zoukankan      html  css  js  c++  java
  • I/O输入输出-输入/ 输出流

     1,   流是一组有序的数据序列,根据操作类型,可以分为输入流和输出流,实际上是程序与文件/数组/网络连接/数据库的关系,但要以程序为中心。

     2,IO流分类

        1)按流向分:输入流与输出流

        2)按数据分:字节流:二进制,一切文件均可

                           字符流:文本文件,只处理纯文本

    3,字符流与字节流(重点)

        1),字节流:输入流:InputStream(字节输入流)

                           输出流:OutputStream(字节输出流)

       2),字符流:输入流:Reader(字符输入流)

                          输出流:Writer(字符输出流)

    4,操作

        举例:搬家------------->读取文件

       1)关联房子  ----------->建立与文件的联系---------------->创建file对象

       2)选择搬家------------->选择对应流---------------------->文件输入流(InputSream,FileInputStream)/文件输出流(InputSream,FileInputStream)

       3)搬家------------------>读取/写出

                a) 卡车大小------->数组大小

                b)运输------------->读取/写出

       4)打发over--------------->释放资源

    ---------读取文件内容-------------

    public static void test()//读取文件内容操作
        {
            File src = new File("e:/test/zjf.txt");
            InputStream is = null;
            try {
                is = new FileInputStream(src);//使用src对象创建is对象
                int len = 0;
                byte[] car =new byte[100];
                try {
                    //String info = null;
                    while(-1!=(len=is.read(car)))//当len=-1时表示已经读到文件末尾
                    {//将字节流转变成字符流,然后读取字符流
                        String info = new String(car,0,len);
                        System.out.println(info);//读取文件内容
                    }
                    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(is!=null)//将数据读取完后需要释放资源
                {
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }

    -------------向文件中写入内容----------------------

    public static void test1()
        {
            File dest = new File("e:/test/zjf.txt");
            OutputStream is = null;
            try {
                is = new FileOutputStream(dest,false);//true代表在文件中追加内容,false代表更新文件内容,不保留原有的
                String src = "hkafhgkshgkag";
                byte[] data = src.getBytes();
                try {
                    is.write(data);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

     --------------文件的拷贝---------------------------------

    比如:src = "e:/study/dir/zjf.txt"  dest = "e:/test/dir/zjf.txt"

    /**
         * 将一个文件中的内容拷贝到另一个文件中,源文件必须是存在的
         * @throws IOException 
         */
        public  static void copyFile(File src,File dest) throws IOException
        {
            //1建立联系,file对象,源头,目的地
            //File src = new File(srcPath);
            //File dest = new File(destPath);
            //2选择流,文件输入流(InputStream,FileInputStream),文件输出流(OutahputStream,FileOutputStream)
             InputStream is  = new FileInputStream(src);
             OutputStream os  = new FileOutputStream(dest);
            //3 操作,循环读取+拷贝
            int len =0;
            byte[] flush = new byte[1024];
            while(-1!=(len=is.read(flush)))//不断将is中的内容读到flush,
            {
                //写出
                os.write(flush, 0, len);//将flush中的内容写到os中
            }
            os.flush();//强制刷出   
            //关闭流,先打开的后关闭
            os.close();
            is.close();
            
        }

    ------------------------文件夹的拷贝,也包括文件夹的内容也一起拷贝过去---------------------

    比如:src="e:/study/dir" 中的dir文件夹以及dir文件夹中的文件拷贝到"e:/test/"下

    最后形成的结果是e:/test/dir/1.txt.........e:/test/dir/6.txt

    package fjz;
    
    import java.io.File;
    import java.io.IOException;
    
    public class Demo005 {
    
        /**
         * 文件夹的拷贝
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
             copyDir();
        }
         
        public  static void copyDir() throws IOException
        {
            File src = new File("e:/study/dir");
            File dest = new File("e:/test");
            if(src.isDirectory())
            {
                dest = new File(dest,src.getName());
                System.out.println(dest);
            }
            copydir(src,dest);
            
        }
        public static void copydir(File src,File dest) throws IOException
        {
            if(src.isFile())//如果src是指向的是一个文件的话
            {
                /**
                 * 将源文件的内容拷贝到目的文件中,并保持原来各自的格式,用的是上面文件拷贝的函数
                 * src:e:studydir1.jpg,e:studydir2.pptx
                 * dest:e:	estdir1.jpg,e:	estdir2.pptx
                 */
                 Demo004.copyFile(src,dest);
            }else if(src.isDirectory())//如果src指向的是一个文件夹的话
            {
                dest.mkdirs();//若目标文件夹没有,就自行创建父目录和子目录
                for(File sub:src.listFiles())
                {
                    /**
                     * 依次遍历要拷贝的文件夹dir中的文件
                     *  sub指的是文件的路径,sub.getName()指的是文件的名字
                        new File(dest,sub.getName())是在目的文件夹下生成一个空的文件
                        即:e:	estdir1.jpg,e:	estdir2.pptx    
                     */
                    copydir(sub,new File(dest,sub.getName()));//递归调用目录    
                }
            }
            
        }
    }
  • 相关阅读:
    vue、vuex、iview、vue-router报错集锦与爬坑记录
    iview框架select默认选择一个option的值
    datetimerangepicker配置及默认时间段展示
    windows下nvm安装node之后npm命令找不到问题解决办法
    The difference between the request time and the current time is too large.阿里云oss上传图片报错
    html5 移动适配写法
    JS判断设备类型跳转至PC端或移动端相应页面
    vue2.0生命周期好文章推荐
    vue如何正确销毁当前组件的scroll事件?
    Apache Shiro 反序列化RCE漏洞
  • 原文地址:https://www.cnblogs.com/zjf-293916/p/6002056.html
Copyright © 2011-2022 走看看