zoukankan      html  css  js  c++  java
  • Java学习笔记37(字节流)

    输出:程序到文件

    输入:文件到程序

    字节输出流:OutputStream类

    作用:在java程序中写文件

    这个类是抽象类,必须使用它的子类

    方法:

    写入:

    package demo;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class OutputStream {
        public static void main(String[] args) throws IOException {
            FileOutputStream fos = new FileOutputStream("d:\java.txt");
            fos.write(100);// 写入d
            
            byte[] bytes = { 65, 66, 67, 68 };
            fos.write(bytes);// 写入ABCD
            fos.write(bytes, 1, 2);// 写入BC
            
            //写字符串,需要String类的方法
            fos.write("java".getBytes());//写入java
            
            
            fos.close();
        }
    }
    // 如果文件不存在,自动创建一个文件
    // 如果存在则覆盖,因此使用时候有风险

    续写:

    package demo;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileOutputStreamDemo {
        public static void main(String[] args) throws IOException {
            File file = new File("d:\java.txt");
            FileOutputStream fos = new FileOutputStream(file, true);
            fos.write("hello
    ".getBytes());// 写hello后换行
            fos.write("world".getBytes());
            fos.close();
        }
    }
    // 这里每次打开运行,如果文件存在,不会覆盖,而是新的内容追加到后面

     异常处理(实际开发中需要):

    package demo;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileOutputStreamDemo3 {
        public static void main(String[] args) {
            //try 外面声明变量,try 里面建立对象
            FileOutputStream fos = null;
            try{
                fos = new FileOutputStream("d:\a.txt");
                fos.write(100);
            }catch(IOException ex){
                System.out.println(ex);
                throw new RuntimeException("文件写入失败,重试");
            }finally{
                try{
                    if(fos!=null)
                      fos.close();
                }catch(IOException ex){
                    throw new RuntimeException("关闭资源失败");
                }
            }
        }
    }

    输入流:InputStream类:

    读取文件:

    package demo;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class FileInputStreamDemo {
        public static void main(String[] args) throws IOException{
            FileInputStream fis = new FileInputStream("c:\a.txt");
            //读取一个字节,调用方法read 返回int
            //使用循环方式,读取文件,  循环结束的条件  read()方法返回-1
            int len = 0;//接受read方法的返回值
        
            while( (len = fis.read()) != -1){
                System.out.print((char)len);
            }
            //关闭资源
            fis.close();
        }
    }

    读取字节数组:

    package demo;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class FileInputStreamDemo {
        public static void main(String[] args) throws IOException {
            FileInputStream fis = new FileInputStream("c:\a.txt");
            //创建字节数组,通常是1024
            byte[] b = new byte[1024];
            
            int len = 0 ;
            while( (len = fis.read(b)) !=-1){
                System.out.print(new String(b,0,len));
            }
            fis.close();
        }
    }

    简单的文件复制:

    用InputStream读取,OutputStream写

    第一种(核心代码很简单,不过加上了异常处理显得复杂):

    package demo;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Copy {
        public static void main(String[] args) {
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try {
                fis = new FileInputStream("d:\java.txt");
                fos = new FileOutputStream("e:\a.txt");
                int len = 0;
                while ((len = fis.read()) != -1) {
                    fos.write(len);
                }
            } catch (IOException ex) {
                System.out.println(ex);
                throw new RuntimeException("文件复制失败");
            } finally {
                try {
                    if (fos != null) {
                        fos.close();
                    }
                } catch (IOException ex) {
                    throw new RuntimeException("释放资源失败");
                } finally {
                    try {
                        if (fis != null) {
                            fis.close();
                        }
                    } catch (IOException ex) {
                        throw new RuntimeException("释放资源失败");
                    }
                }
            }
        }
    }

    可以复制所有文件,不过运行速度相对慢,如果复制大文件,循环次数多耗时长

    采用数组缓冲提高效率:

    package demo;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Copy1 {
        public static void main(String[] args) {
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try{
                //复制一部较大的视频
                fis = new FileInputStream("f:\AV.ev4");
                fos = new FileOutputStream("d:\study.ev4");
                //定义一个字节数组,缓冲
                byte[] bytes = new byte[1024*10];
                int len = 0;
                while((len = fis.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
            } catch (IOException ex) {
                System.out.println(ex);
                throw new RuntimeException("文件复制失败");
            } finally {
                try {
                    if (fos != null) {
                        fos.close();
                    }
                } catch (IOException ex) {
                    throw new RuntimeException("释放资源失败");
                } finally {
                    try {
                        if (fis != null) {
                            fis.close();
                        }
                    } catch (IOException ex) {
                        throw new RuntimeException("释放资源失败");
                    }
                }
            }
        }
    }
    
    //发现很快的速度视频就复制好了

    可以发现效率提高很大

  • 相关阅读:
    九度OJ 1035:找出直系亲属 (二叉树、递归)
    九度OJ 1034:寻找大富翁 (排序)
    九度OJ 1033:继续xxx定律 (基础题)
    九度OJ 1032:ZOJ (基础题)
    centos 6.4 安装mongodb
    数据校验工具类
    《 mongodb 学习 》java 基本操作
    《 mongodb 学习 》基本操作2
    《 mongodb 学习 》之基本操作
    《 mongodb 学习 》之安装篇
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8287024.html
Copyright © 2011-2022 走看看