文件的拷贝:
文件的拷贝是通过流实现,即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();
}
}
}
}
}
}