Java流 实现文件的读写及复制

原理:

把硬盘的文件读入内存,

把缓存的数据写入硬盘

需要用到流对象,InputStream 、OutputStream、FileInputStream、FileOutputStream

至于什么是流,这个概念暂时不清楚,大家可以下图,我的理解:其本质可以传输的字节数据,从下面可以看出机包括原始数据,也包括了工具,感觉和对象的概念一样,万物皆可对象,万物皆可流。Java流 实现文件的读写及复制

1.写操作:

把数据写入硬盘:

代码如下:

        File file = new File("d:/a.txt");

        OutputStream os= new FileOutputStream(file);

        String msg= "hello world !\r\n  hello tomorrow !";

        os.write(msg.getBytes());

        os.close();

总结:把实体文件转换为Java对象,转换为流,写入硬盘,释放资源

 

2.读文件

把硬盘中的数据读入内存,用console显示出来。

        File file = new File("d:/a.txt");

        InputStream is= new FileInputStream(file);

        byte[] buf = new byte[1024];

        int len=0;

        while( (len=is.read(buf)) != -1 ){

            System.out.write(buf,0,len);

        }
        
        is.close();

总结: 把数据从硬盘读入内存,也是需要把实体文件对象化,流化,这里在读的时候多了点心眼。你要按照人家给的方法读。比如一次只能读一行(以\r\n结尾的为一行)读到完有个判断遇见文件结束符EOF,read方法则返回-1,结束循环。

输出打印则和读是同步的,流传输的时候有个阀值,就好比管道的口径,我设置的是1M。  

最后释放资源。

 

1.文件的本地复制实现

把文件读入内存,同步输出到硬盘

public void copy(File srcFile ,File desFile) throws IOException {
         OutputStream os= new FileOutputStream(desFile);

        //  文件写入内存:

         InputStream is = new FileInputStream(srcFile);

         byte[] buf = new byte[1024];

         int len=0;

         while((len= is.read(buf)) != -1){

         //写入硬盘

         os.write(buf,0,len);

         }

         os.close();

         is.close();
    }

    main里面,最后调用

         File srcFile= new File("d:/a.txt");
        File desFile= new File("d:/d.txt");
        ctf.copy(srcFile, desFile);

 

以下是全部代码:

package com.javabase.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class ****TestFile {
    public static void main(String[] args) throws IOException {
        ****TestFile ctf = new ****TestFile();
//        ctf.write();
//        ctf.read();
        File srcFile = new File("d:/a.txt");
        File desFile = new File("d:/d.txt");
        ctf.copy(srcFile, desFile);

    }

    public void copy(File srcFile, File desFile) throws IOException {
        OutputStream os = new FileOutputStream(desFile);

        //   文件写入内存:

        InputStream is = new FileInputStream(srcFile);

        byte[] buf = new byte[1024];

        int len = 0;

        while ((len = is.read(buf)) != -1) {

            // 写入硬盘

            os.write(buf, 0, len);

        }

        os.close();

        is.close();
    }

    public void write() throws IOException {
        File file = new File("d:/a.txt");

        OutputStream os = new FileOutputStream(file);

        String msg = "hello world !\r\n  hello tomorrow !";

        os.write(msg.getBytes());

        os.close();
    }

    public void read() throws IOException {
        File file = new File("d:/a.txt");

        InputStream is = new FileInputStream(file);

        byte[] buf = new byte[1024];

        int len = 0;

        while ((len = is.read(buf)) != -1) {

            System.out.write(buf, 0, len);

        }

        is.close();
    }

}