学习Java小结

来源:互联网 发布:武汉国企java招聘信息 编辑:程序博客网 时间:2024/06/07 20:38

 学习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;    }
原创粉丝点击