学习Java小结

3 篇文章 0 订阅

 学习Java小结-1

学习Java也有近一个月了,基础语法、常用类也有所了解。上周把文件相关操作进行了一个总结,制作了一个简单的文件常用操作的工具类。此处详解文件的拷贝与移动

工具类包含了容下功能的实现:
1、 拷贝文件
2、 移动文件
3、 遍历文件夹
4、 获取文件夹内所有文件
5、 文件打包与解包

下面来看一下功能的具体实现

1、拷贝文件

思路:将源文件的内容读取到内存中,然后在写入到目标文件中即可
由于要实现任意文件的拷贝,选用Java二进制输入(DataInputStream)输出(DataOutputStream)流,还要支持任意大小的文件的拷贝,因此采用缓冲循环读取写入方式。具体看代码:

/*** 文件拷贝
* 
* @param srcFile
*            源文件绝对路径的文件对象
* @param destFile
*            目标文件绝对路径的文件对象
* @return 成功拷贝返回true,否则为false
*/
public static boolean copyFile(File srcFile, File destFile) {
        //文件拷贝结果
        boolean flag = false;
        //判断一下源文件是否存在,增加方法的安全性
        if (srcFile.exists()) {
            try {
                //假如源文件是一个目录,则直接创建目录,仅支持文件的拷贝
                if (!srcFile.isDirectory()) {
                    //创建目标文件的父级目录
                    destFile.getParentFile().mkdirs();
                    //创建文件输入流 绑定源文件
                    FileInputStream in = new FileInputStream(srcFile);
                    //创建二进制输入流,支持拷贝任意类型的文件
                    DataInputStream srcIn = new DataInputStream(in);
                    //创建对应的输出流、二进制输出流 绑定输出文件
                    FileOutputStream out = new FileOutputStream(destFile);
                    DataOutputStream desOut = new DataOutputStream(out);
                    //因为文件大小不定,使用缓冲方式读入数据。每次最多读取4096byte
                    //实际读取长度为length
                    int length = 0;
                    byte[] readBuffer = new byte[4096];
                    //循环读取,直到文件末尾 srcIn.read(readBuffer)返回-1
                    while ((length = srcIn.read(readBuffer)) != -1) {
                        //安装实际读取长度写入目标文件
                        desOut.write(readBuffer, 0, length);
                    }
                    //刷新输出流,将数据保存到目标文件中
                    desOut.flush();
                    //文件拷贝完毕,关闭输出、输入流
                    desOut.close();
                    in.close();
                    srcIn.close();
                    flag = true;
                } else {
                    destFile.mkdirs();
                    flag = true;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println(srcFile.getAbsolutePath() + "不存在");
        }
        return flag;
    }

2、文件移动

思路:将源文件内容读取到内存中,写入目标文件后删除源文件
在功能1的基础上实现源文件的删除即可。注:此方法仅能移动空文件夹

    /**
     * 移动文件
     * 
     * @param srcFile
     *            源文件绝对路径的文件对象
     * @param destFile
     *            目标文件绝对路径的文件对象
     * @return 成功移动返回true,否则为false
     */

    public static boolean moveFile(File srcFile, File destFile) {
        //调用已经实现的文件拷贝方法
        boolean flag = copyFile(srcFile, destFile);
        //如果已经成功拷贝文件,则删除源文件
        if (flag) {
            srcFile.delete();
        }
        return flag;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值