Java学习笔记37(字节流)

2018-06-18 03:51:05来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

输出:程序到文件

输入:文件到程序

 

字节输出流: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\r\n".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("释放资源失败");
                }
            }
        }
    }
}

//发现很快的速度视频就复制好了

可以发现效率提高很大

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:字节码技术及动态代理

下一篇:java实现两个int数交换