黑马程序员-将指定目录下的文件复制到指定的目录,并更改扩展名,黑马程序员
分享于 点击 9031 次 点评:246
黑马程序员-将指定目录下的文件复制到指定的目录,并更改扩展名,黑马程序员
------- android培训、java培训、期待与您交流! ---------- 将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad
package com.itheima;
import com.itheima.util.IOUtils;
/**
* 将d:\java 目录下的所有.java 文件复制到d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad
*
* @author mrng
*
*/
public class TestCopy {
public static void main(String[] args) throws Exception {
/**
* copyFilesAndChangeExtension(String srcDir, String extension, String
* destDir, String newExtension, boolean searchSubDir)
* 这个方法提供了强大的文件复制功能,通过不同的参数组合,可以达到各种效果
*
* srcDir指定要复制的目录 extension指定要复制的文件的扩展类型,如果不指定(""或null),将会复制指定目录下的所有文件
* 还可以使用排除法(使用"!")过滤文件,比如,extension 的值为"!.java",那么除了".java"文件,其它的文件都将复制
* destDir指定目的地目录
* searchSubDir指定是否对指定目录的子孙目录下的文件也进行复制
*
*/
String srcDir = "src/com/itheima";
String destDir = "src/copyFiles";
//将xxx目录下的所有.java 文件复制到xxx目录下,并将原来文件的扩展名从.java 改为.jad
IOUtils.copyFilesAndChangeExtension(srcDir, ".java",
destDir, ".jad", false);
}
}
package com.itheima.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* IO 工具类
*
* @author mrng
*
*/
public class IOUtils {
/**
* 将指定文件拷贝到目的地 这里采用的是基础流(FileinputStream,FileOutputStream)+byte数组(缓冲区)实现
* 当然也可以使用包装流(Buffered....)
*
* @param src
* 将要拷贝的文件
* @param dest
* 将文件要保存到的目标目录
*
*/
public static void copy(String src, String dest) {
copy(src, dest, null);
}
/**
* copy(String src, String dest)的重载形式,可以更改文件扩展名
*
* @param src
* @param dest
* @param newExtension
*/
public static void copy(String src, String dest, String newExtension) {
File srcFile = new File(src);
// 如果文件不存在或是一个目录,抛出异常
if (!srcFile.exists() || srcFile.isDirectory())
throw new RuntimeException("文件不存在");
File destDir = new File(dest);
// 如果目标目录不存在,则创建
if (!destDir.exists()) {
destDir.mkdirs();
} else {
// 如果是文件,抛出异常
if (destDir.isFile()) {
throw new RuntimeException("您指定的目的地是一个文件,请重新指定目录");
}
}
// 代表目标文件的完整路劲信息的对象
File destFile = null;
System.out.println();
// 判断要不要改变文件的扩展名
if (newExtension == null || newExtension.trim().equals("")) {
// 不改变文件扩展名
destFile = new File(dest + "/" + srcFile.getName());
} else {
// 改变文件扩展名
// 如果文件没有扩展名,直接加上新的扩展名
if (getExtension(srcFile.getPath()).equals("")) {
destFile = new File(dest + "/" + srcFile.getName()
+ newExtension);
} else {
// 如果文件有扩展名,替换为新的扩展名
String newFilename = srcFile.getName();
newFilename = newFilename.substring(0,
newFilename.lastIndexOf("."))
+ newExtension;
destFile = new File(dest + "/" + newFilename);
}
}
InputStream is = null;
OutputStream os = null;
// 存放文件片段的缓冲区
byte[] buf = new byte[1024 * 8];
// 记录每次读取了多少byte数据
int len;
try {
is = new FileInputStream(srcFile);
os = new FileOutputStream(destFile);
// 循环读取数据并写入到输出流
while ((len = is.read(buf)) != -1) {
os.write(buf, 0, len);
}
System.out.println("拷贝成功!");
System.out.println("文件\"" + srcFile.getName() + "\n\"已从\""
+ srcFile.getAbsolutePath() + "\n拷贝到\""
+ destFile.getAbsolutePath() + "\"");
} catch (IOException e) {
throw new RuntimeException("文件拷贝出现错误,请重试!");
} finally {
// 关闭流
close(is, os);
}
}
/**
* 获得文件的扩展名
*
* @param filePath
* @return
*/
public static String getExtension(String filePath) {
File file = new File(filePath);
// 如果文件不存在,抛出异常
if (!file.exists())
throw new RuntimeException("文件不存在");
// 得到文件名
String fileName = file.getName();
// 找出属于扩展名的那个“.”
int index = fileName.lastIndexOf(".");
// 如果文件没有扩展名,返回""
if (index < 1) {
return "";
}
// 截取扩展名部分
String extension = fileName.substring(index, fileName.length());
return extension;
}
/**
* 将指定目录下的文件(指定扩展名)复制到指定目录(可以更改扩展名)
*
* @param srcDir
* 源目录
* @param extension
* 要复制的文件的扩展名,如果不指定,就代表所有文件
* @param destDir
* 目标目录
* @param newExtension
* 新的扩展名
* @param searchSubDir
* 是否对指定的源目录下的子目录也执行相同的操作
*/
public static void copyFilesAndChangeExtension(String srcDir,
String extension, String destDir, String newExtension,
boolean searchSubDir) {
File srcFile = new File(srcDir);
// 如果目录不存在或不是一个目录,抛出异常
if (!srcFile.exists() || !srcFile.isDirectory())
throw new RuntimeException("目录不存在");
File newDestDir = new File(destDir);
// 如果目标目录不存在,则创建
if (!newDestDir.exists()) {
newDestDir.mkdirs();
} else {
// 如果是文件,抛出异常
if (newDestDir.isFile()) {
throw new RuntimeException("您指定的目的地是一个文件,请重新指定目录");
}
}
// 文件清单
List<File> fileList = new ArrayList<File>();
// 获取指定目录的文件清单
getDirList(fileList, srcFile, extension, searchSubDir,
new MyFilenameFilter());
// 复制文件并更改扩展名
for (File fiel : fileList) {
copy(fiel.getPath(), newDestDir.getPath(), newExtension);
}
}
/**
* 获得指定目录的文件清单
*
* @param fileList
* 保存文件清单的集合
* @param file
* 要获取文件清单的目录
* @param extension
* 扩展名,如果不指定,就代表所有文件
* @param searchSubDir
* 是否查找指定目录的子目录
* @param fileanmeFilter
* 文件名过率器
* @return 返回指定目录的文件清单
*/
public static void getDirList(List<File> fileList, File file,
String extension, boolean searchSubDir,
FilenameFilter fileanmeFilter) {
getDirList(fileList, file, extension, searchSubDir,
new MyFilenameFilter(), 0);
}
/**
* getDirList(List<File> fileList, File file, String extension, boolean
* searchSubDir, FilenameFilter fileanmeFilter) 的重载形式,多了一个功能性参数
*
* @param level
* 记录目录层级
*/
private static void getDirList(List<File> fileList, File file,
String extension, boolean searchSubDir,
FilenameFilter fileanmeFilter, int level) {
//目录层级+1
level ++;
// 如果file是目录就遍历
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files == null || files.length == 0) {
return;
}
// 如果需要查找指定目录的子目录,就递归
if (level == 1 || searchSubDir == true) {
for (File f : files) {
getDirList(fileList, f, extension, searchSubDir,
fileanmeFilter);
}
}
} else if (file.isFile()) {
// 如果是文件并且extension已指定,就对其进行过滤
if (extension != null && !extension.trim().equals("")) {
if (fileanmeFilter.accept(file, extension)) {
fileList.add(file);
}
} else {
// 如果没有指定extension,不进行过滤
fileList.add(file);
}
}
}
/**
* 关闭流
*/
private static void close(InputStream is, OutputStream os) {
// 关闭流,如果关闭不成功,将流对象置为null
if (is != null) {
try {
is.close();
} catch (IOException e) {
is = null;
e.printStackTrace();
}
}
// 关闭流,如果关闭不成功,将流对象置为null
if (os != null) {
try {
is = null;
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.itheima.util;
import java.io.File;
import java.io.FilenameFilter;
/**
* 此类可以根据扩展名过滤文件
*
* @author mrng
*
*/
public class MyFilenameFilter implements FilenameFilter {
/**
* 对指定文件进行过滤
*
* @param file
* 指定的文件
*
* @param extension
* 要过滤的扩展名 此参数有两种用法:
* 1,比如".java",如果文件扩展名为".java",返回true
* 2,比如"!.java",如果文件扩展名不是".java",则返回true
*/
public boolean accept(File file, String extension) {
// file==null直接返回false
// 如果extension为null或"",那么调用这个方法没无意义了,返回false
// 如果file不存在或是一个目录,返回false
if (file == null || extension == null || "".equals(extension.trim())
|| !file.exists() || file.isDirectory()) {
return false;
}
// 获得文件的扩展名
String fileExtension = IOUtils.getExtension(file.getPath());
if (extension.startsWith("!")) {
if (fileExtension.equals(extension.substring(1))) {
return false;
}
return true;
} else {
if (fileExtension.equals(extension)) {
return true;
}
return false;
}
}
}
------- android培训、java培训、期待与您交流! ----------
详细请查看:http://edu.csdn.net/heima/
相关文章
- 暂无相关文章
用户点评