java核心技术之IO流(二)FileInputStream和FileOutputStream

x33g5p2x  于2021-03-13 发布在 Java  
字(3.3k)|赞(0)|评价(0)|浏览(362)

简单的说明

从文件中读取和写入数据,我们要使用FileInputStream和FileOutputStream类来实现。只是要注意的是,这二个类处理的是字节(byte)型文件。

FileInputStream和FileOutputStream

FileInputStream类

构造方法:
FileInputStream(String path)
FileInputStream(File file)

关键方法:
read()
read(byte[] buffer, int byteOffset, int byteCount)

FileOutputStream类

构造方法:
FileOutputStream(String path)
FileOutputStream(File file)

关键方法:
write(int oneByte)
write(byte[] buffer, int byteOffset, int byteCount)

一个测试的Demo

定义三个方法:
(1)testFileInputStream方法—读取文件内容
FileInputStream的使用方法:

//1.创建一个File对象   
//2.创建一个FileInputStream对象   
//3.调用read方法,读取内容数据   
//4. 关闭对应的流

(2)testFileOutputStream方法—-往文件写内容
FileOutputStream的使用方法:

//1.创建一个File文件   
//2.创建一个FileOutputStream对象   
//3.调用write方法写入数据   
//4.关闭对应的输出流

(3)copyFile方法—-复制文件的方法

//1.定义输入和输出的文件   
//2.定义输入流和输出流的对象   
//3.执行复制操作   
//4.关闭对应的流,先关输出流,后关输入流
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputStreamFileOutputStream {

    //5.同时使用FileOutputStream和FileInputStream,实现二个文件的复制
    //参数src为输入文件,参数des为输出文件,byteLength为每次复制的字节数
    public static void copyFile(String src,String des,int byteLength){
        FileInputStream fis = null;
        FileOutputStream fos = null;

        try {
            //定义输入和输出的文件
            File fin = new File(src);
            File fout = new File(des);
            //定义输入流和输出流的对象
            fis = new FileInputStream(fin);
            fos = new FileOutputStream(fout);
            //3.执行复制操作
            byte[] b = new byte[byteLength];
            int len;
            while ((len = fis.read(b)) != -1) {
                fos.write(b, 0, len);
            }
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //4.关闭对应的流,先关输出流,后关输入流
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    //4.FileOutputStream的使用
    public static void testFileOutputStream(){
        //2.创建一个FileOutputStream对象
        FileOutputStream fos = null;
        try {
            //创建一个File文件
            File f1 = new File("file_output_stream.txt");
            fos = new FileOutputStream(f1);
            String str= new String("test FileOutputStream");
            //调用write方法写入数据
            fos.write(str.getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(fos != null){
                    //关闭对应的输出流
                    fos.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }           
        }
    }

    //3.FileInputStream的使用
    public static void testFileInputStream(){   
        //2.创建一个FileInputStream对象
        FileInputStream fis = null;
        try {
            //1.创建一个File对象
            File f1 = new File("hello.txt");
            fis = new FileInputStream(f1);
            byte[] b =  new byte[10] ;
            int len;
            //3.调用read方法,读取内容数据
            while ((len = fis.read(b))!= -1) {
                //System.out.print(b.toString());
                for(int i=0;i<len;i++){
                    System.out.print((char)b[i]);   
                }           
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                //4. 关闭对应的流
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

调用:

//3.FileInputStream的使
FileInputStreamFileOutputStream.testFileInputStream();

//4.FileOutputStream的使用
FileInputStreamFileOutputStream.testFileOutputStream();

//5.同时使用FileOutputStream和FileInputStream,实现二个文件的复制
long t1 = System.currentTimeMillis();       

FileInputStreamFileOutputStream.copyFile("data.bmp","data_01.bmp",10);
long t2 = System.currentTimeMillis();
System.out.print("复制文件消耗的时间:"+(t2 - t1));//100-60    10 -551

参考资料:
1.FileInputStream api文档
android_sdk_docs_offline/reference/java/io/FileInputStream.html
2.FileOutputStreamapi文档
android_sdk_docs_offline/reference/java/io/FileOutputStream.html
3.FileOutputStream与FileInputStream 视频

相关文章