IO流——文件的拷贝

IO流——文件的拷贝

问题描述:

  1.在控制台输入一个文件路径(src)
  2.输入target路径
  3.将src路径指定的文件拷贝到target目录下
例如:
  F:\test\t.txt
  F:\aaa\

import java.io.*;
import java.util.Scanner;

/**
 * 手写文件复制
 */
public class Copy {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("请输入源文件路径 ");
        String srcPath = input.nextLine();
        File srcFile = new File(srcPath);

        System.out.println("请输入目标路径");
        String targetPath = input.nextLine();
        File targetFile = new File(targetPath + srcFile.getName());

        //如果输入的目标路径有不存在的父目录则需要在此判断父路径存不存在,不存在则创建,否则不会主动创建父目录,则报错
        File s = new File(targetPath);
        if (!s.exists()) {
            s.mkdirs();
        }

        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(srcFile);
            os = new FileOutputStream(targetFile);
            //为了提高效率,设置缓存数组(读取的字节数据会暂存放到该字节数组中)
            byte[] bytes = new byte[8];
            //i指的是本次读取的真实长度,temp等于-1时表示读取结束
            int i = 0;
            while ((i = is.read(bytes)) != -1) {
                os.write(bytes, 0, i);
            }
            /**
             * 将缓存数组中的数据写入文件中,注意:写入的是读取的真实长度;
             * 如果使用out.write(bytes)方法,那么写入的长度将会是8,即缓存数组的长度
             */
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //两个流需要分别关闭
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

posted @ 2019-09-28 10:25  此间的我  阅读(257)  评论(0编辑  收藏  举报