文件的拷贝、删除、保存以及关键字替换

文件的拷贝:

文件的拷贝是通过流实现,即inputstream与outputstream的子类。文件拷贝一般传入的参数有两种,即传入路径或者直接传文件File对象,由此可以写以下两个方法void copyFile(String srcpth,String desPath)和copyFile( File srcFile,File desFile),这两个方法是方法的重载。
注意:拷贝文件的时候分为拷贝文件和文件夹,拷贝文件夹的时候要将其下的文件先拷贝,使用递归的方法来实现,并且要先创建文件夹,用方法mdir()或者mdirs()。用方法File.list()来得到文件夹下的子文件的目录,或者用方法File.listFile()来得到文件夹下的子文件。在拷贝的过程中可以采用写入byte数组的方法使得拷贝的速度加快,一般数组的大小可取1024。不能一次性读完,因为有可能会造成内存溢出,虚拟机的最大内存为64M。
关键字的替换:替换的过程在读取跟写入的过程实现,在读取一个数组的时候,将其中的关键字替换掉,再进行写入操作。使用String的一个方法replace()。注意替换的关键字不能为空字符串或为空。
关流操作:关流操作放在finally里实现可以防止一些意外故障。

/**
* 文件拷贝
* 
* @param srcPath
*            源路径
* @param desPath
*            目的路径
*/
public void copyFile(String srcPath, String desPath, String srcKey, String desKey) {
       File src = new File(srcPath);
       File des = new File(desPath);
       copyFile(src, des, srcKey, desKey);
}
/**
* 文件拷贝
* 
* @param src
*            源文件
* @param dest
*            目标文件
*/
private void copyFile(File src, File dest, String srcKey, String desKey) {
        if (src != null && src.exists()) {
            InputStream in = null;
            OutputStream out = null;
           // 文件流只能创建文件 不能创建文件夹
           if (src.isDirectory()) {
              if (!dest.exists()) {
                 // mdirs 创建多个文件夹
                 dest.mkdir();
              }
         String files[] = src.list();
         for (String file : files) {
             File srcFile = new File(src, file);
             File destFile = new File(dest, file);
             copyFile(srcFile, destFile, srcKey, desKey);
             }
        } else {
        try {
            // 一次性读完会造成内存溢出 虚拟机的最大内存为64M
           in = new FileInputStream(src);
           out = new FileOutputStream(dest);
           byte[] buffer = new byte[1024];
           int length = in.read(buffer);
           if (src == null || "".equals(src)) {
              // 不进行替换
              while (length != -1) {
                    out.write(buffer, 0, length);
                    length = in.read(buffer);
              }
           } else {
                  // 进行替换
                  if (desKey == null) {
                       desKey = "";
                  }
                  while (length != -1) {
                        String string = new String(buffer, 0, length);
                        string = string.replaceAll(srcKey, desKey);
                        out.write(string.getBytes());
                        length = in.read(buffer);
                   }
       }
} catch (Exception e) {
         e.printStackTrace();
} finally {
         try {
             if (in != null) {
                 in.close();
             }
            if (out != null) {
                 out.close();
            }
           } catch (IOException e) {
                   e.printStackTrace();
                }
         }
     }
  }
}

文件的删除:

文件删除使用方法File.delete()实现。跟文件拷贝一样,当删除的是一个文件夹的时候要先其下的子文件先删除,同样的使用递归的方法实现;当然它也可以有两个重载的方法,即deleteFile(String srcPath,String desPath)与deleteFile(File srcFile,File desFile)。

/**
     * 删除文件
     * 
     * @param scrPath
     *            删除文件的路径
     */

    public void deleteFile(String scrPath) {
        File file = new File(scrPath);
        deleteFile(file);

    }

    /**
     * 删除文件
     * 
     * @param srcFile
     *            源文件
     */
    public void deleteFile(File srcFile) {
        if (srcFile.isDirectory()) {
            String files[] = srcFile.list();
            for (String src : files) {
                deleteFile(new File(srcFile, src));
            }
        }
        srcFile.delete();
    }

文件保存:

文件保存的时候要先判断其父文件夹是否存在,不存在则需要先创建。保存的时候要将保存的内容转换为byte数组进行写入,使用方法String.getBytes()。

/**
     * 保存文件
     * 
     * @param desPath
     *            保存的路径
     * @param text
     *            保存的内容
     */

    public void saveFile(String desPath, String content) {
        saveFile(new File(desPath), content);

    }

    /**
     * 保存文件
     * 
     * @param desFile
     *            保存文件
     * @param content
     *            保存文件
     */
    public void saveFile(File desFile, String content) {
        if (desFile != null) {
            // 判断父类文件夹存在否
            File parentFile = desFile.getParentFile();
            if (!parentFile.exists()) {
                parentFile.mkdirs();
            }
            OutputStream out = null;
            try {
                out = new FileOutputStream(desFile);
                out.write(content.getBytes());
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值