对于某些文件进行操作时,看文件的重要性, 最好做个备份,不然做了修改,没了记录, 后悔都来不及。这点意识还是要一定到位的。特别是对一些重要文件的操作。不要动不动就搞删除覆盖, 这种删除后,要是恢复就有点麻烦了, 所以搞啥系统级文件时,做个备份是没错,操作错了,可能还有后悔药吃。好了,上代码, 看下代码处理文件复制,很简单的一顿操作。
/** * 复制单个文件 * * @param srcFileName * 待复制的文件名 * @param destFileName * 目标文件名 * @param overlay * 如果目标文件存在,是否覆盖 * @return 如果复制成功,则返回true,否则返回false */ public static boolean copyFile(String srcFileName, String destFileName, boolean overlay) { // 判断原文件是否存在 File srcFile = new File(srcFileName); if (!srcFile.exists()) { log.info("复制文件失败:原文件" + srcFileName + "不存在!"); return false; } else if (!srcFile.isFile()) { log.info("复制文件失败:" + srcFileName + "不是一个文件!"); return false; } // 判断目标文件是否存在 File destFile = new File(destFileName); if (destFile.exists()) { // 如果目标文件存在,而且复制时允许覆盖。 if (overlay) { // 删除已存在的目标文件,无论目标文件是目录还是单个文件 log.info("目标文件已存在,准备删除它!"); if (!destFile.delete()) { log.info("复制文件失败:删除目标文件" + destFileName + "失败!"); return false; } } else { log.info("复制文件失败:目标文件" + destFileName + "已存在!"); return false; } } else { if (!destFile.getParentFile().exists()) { // 如果目标文件所在的目录不存在,则创建目录 log.info("目标文件所在的目录不存在,准备创建它!"); if (!destFile.getParentFile().mkdirs()) { log.info("复制文件失败:创建目标文件所在的目录失败!"); return false; } } } // 准备复制文件 // 读取的位数 int byteread = 0; InputStream in = null; OutputStream out = null; try { // 打开原文件 in = new FileInputStream(srcFile); // 打开连接到目标文件的输出流 out = new FileOutputStream(destFile); byte[] buffer = new byte[1024]; // 一次读取1024个字节,当byteread为-1时表示文件已经读完 while ((byteread = in.read(buffer)) != -1) { // 将读取的字节写入输出流 out.write(buffer, 0, byteread); } log.info("复制单个文件" + srcFileName + "至" + destFileName + "成功!"); return true; } catch (Exception e) { log.info("复制文件失败:" + e.getMessage()); return false; } finally { // 关闭输入输出流,注意先关闭输出流,再关闭输入流 if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
这个也可以做成批量的,批量的文件的话,操作,无非就是把文件搞成集合来装。好了,这些都是简单操作。 文件操作完后,切记,要关闭文件流,不然就一直占着资源不释放。