A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ash午夜阳光 于 2015-11-17 01:38 编辑


学习io流第二天了,回宿舍写了个拷贝文件的代码,老师说以前点招考过这题,就自己试着做了一下,欢迎交流
package reader_writer;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

//完成文件夹的复制粘贴,将"E:/javase_demo"文件夹复制到"E:/copy"
/**
* 首先用递归找到所有的.java文件 在找到.java文件的基础上进行操作 1.创建输入流对象 2.获取所要复制文件夹为根目录的 文件的相对路径 字符串
* eg:javase_demo\src\com\itheima\day01_05\ 3.建立输出路径 4. 创建文件夹 5.获取输出流对象
* 6.io流读写数据 7.关流
*
* @author LiuGuangshun
*
*/
public class UserCopy {

        public static void main(String[] args) throws IOException {
               
               
                copyFile(getFromFile(), getToFile());

        }
        public static File getFromFile() {
                System.out.println("请输入文件夹路径");
                Scanner sc = new Scanner(System.in);
                while (true) {
                        String s = sc.nextLine();
                        File file = new File(s);
                        if (!file.isDirectory()) {
                                System.out.println("输入的不是路径");
                        } else if (file.isFile()) {
                                System.out.println("输入的是文件,不是文件夹路径");
                        } else {

                                return file;
                        }

                }
               
        }
        public static File getToFile() {
                System.out.println("请输入要拷贝到那个路径下:");
                Scanner sc = new Scanner(System.in);
                while (true) {
                        String s = sc.nextLine();
                        File file = new File(s);
                        if (!file.isDirectory()) {
                                System.out.println("输入的不是路径");
                        } else if (file.isFile()) {
                                System.out.println("输入的是文件,不是路径");
                        } else {

                                return file;
                        }

                }
               
        }

        public static void copyFile(File fileFrom, File fileTo) throws IOException {
                // TODO Auto-generated method stub
                copy(fileFrom, fileTo, new File(fileFrom.getAbsolutePath()));

        }

        public static void copy(File fileFrom, File fileTo, File file)
                        throws IOException {
                // TODO Auto-generated method stub

                if (file.isFile()) {
                        // 创建输入流对象
                        BufferedInputStream bis = new BufferedInputStream(
                                        new FileInputStream(file));
                        // 获取所要复制文件夹为根目录的 文件的相对路径 字符串
                        // eg:javase_demo\src\com\itheima\day01_05\
                        // 前后都要处理:(前只留fromFile最后一级目录********后只保留文件绝对路径的文件名之前)
                        String s = fileFrom.getName()
                                        + file.getAbsolutePath().substring(
                                                        fileFrom.getAbsolutePath().length(),
                                                        file.getAbsolutePath().length()
                                                                        - file.getName().length());

                        // 建立输出路径(只建立路径即可,文件会在写入输出流对象时创建)
                        File to = new File(fileTo, s);
                        // 创建文件夹
                        to.mkdirs();
                        // 获取输出流对象
                        BufferedOutputStream bos = new BufferedOutputStream(
                                        new FileOutputStream(new File(to, file.getName())));
                        // 读写数据
                        byte[] bys = new byte[1024];
                        int len = 0;
                        while ((len = bis.read(bys)) != -1) {
                                bos.write(bys, 0, len);
                        }
                        // 关流
                        bis.close();
                        bos.close();

                } else {
                        File[] fls = file.listFiles();
                        if (fls != null) {
                                for (File file2 : fls) {
                                        copy(fileFrom, fileTo, file2);
                                }
                        }
                }

        }

}


1.png (10.2 KB, 下载次数: 73)

输入

输入

2.png (199.23 KB, 下载次数: 64)

2.png

3.png (200.54 KB, 下载次数: 58)

3.png

5 个回复

倒序浏览
不错。。。。。。。。。。。
回复 使用道具 举报
ln0491 发表于 2015-11-16 12:45
不错。。。。。。。。。。。

谢谢鼓励
回复 使用道具 举报
24小时后的更新版,该睡觉了,明天还有课,晚安
回复 使用道具 举报
怎么样? IO流学习还可以吧?
回复 使用道具 举报
ash午夜阳光 来自手机 中级黑马 2015-11-17 12:31:15
地板
小鹿 发表于 2015-11-17 08:50
怎么样? IO流学习还可以吧?

这块就一个套路
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马