黑马程序员技术交流社区
标题:
遍历目录,查找文件并拷贝
[打印本页]
作者:
Optimus
时间:
2014-12-12 10:31
标题:
遍历目录,查找文件并拷贝
要求:编写一个程序,把某个目录下所有的带.java文件拷贝到另一个目录中,拷贝成功后,把后缀名是.java改成.txt
下面是我写的实现,大家交流下:
public class CopyFileDemo {
public static void main(String[] args) {
File file = new File("D://code");
String suffix = ".java";
findFile(file, suffix);
System.out.println("文件复制成功!");
}
/**
* 遍历目录,找出后缀为.java的文件
*
* @param file
* @param suffix
*/
public static void findFile(File file, String suffix) {
if (file == null)
return;
if (file.isDirectory()) {// 如果file对象是目录
File[] files = file.listFiles();
if (files != null) {
for (File f : files) {
findFile(f, suffix);
}
}
} else {// 如果file对象是文件
//获取jpg路径名
String path = file.getPath().toLowerCase();
//截取jpg文件名前缀
String prefixName = path.substring(path.lastIndexOf("\\")+1, path.indexOf("."));
String newFileName = prefixName + ".txt";
if (path.endsWith(suffix)) {
// 如果文件是java文件,复制到另一个目录
File targetFile = new File("F:\\test" + File.separator + newFileName);
copyFile(file, targetFile);
}
}
}
/**
* 复制文件到另一个目录,同时修改文件后缀为.txt
*
* @param sourceFile
* @param targetFile
* @param prefix
* @param suffix
*/
public static void copyFile(File sourceFile, File targetFile) {
String line = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(
sourceFile)));
bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(targetFile)));
while ((line = br.readLine()) != null) {
bw.write(line);
bw.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
复制代码
作者:
Afridoce
时间:
2014-12-12 13:31
赞一个!
作者:
李贵栋
时间:
2014-12-12 14:16
给力
作者:
冥夜
时间:
2014-12-12 14:22
很好- -我写成的是这样。。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
//复制一个文件夹下的所有java文件到另一目录,且将。java替换成。txt
public class CopyDir
{
public static void main(String[] args)
{
File src=new File("D:\\src");//想要复制的文件目录
File dest=new File("D:\\srcCopy");//目的文件目录
dest.mkdir();//创建目的文件夹
copyDir(src,dest);//复制文件并更改格式
}
private static void copyDir(File src, File dest)
{
File[] files=src.listFiles();//获取文件列表
for(File file:files)
{
if(file.isDirectory())//如果是文件夹
{
File f=new File(dest.getAbsolutePath()+"\\"+file.getName());//封装目的地对应的文件夹对象
f.mkdir();//创建目的地对应目录
copyDir(file,f);//递归展开目录
}
else//如果是文件
{
if(file.getName().endsWith(".java"))//如果是java文件
{
String path=dest.getAbsoluteFile()+"\\"+file.getName();//用字符串保存对应的文件路径
path=path.replaceAll(".java", ".txt");//将。java替换成。txt
File f=new File(path);//将该文件对象封装
copyFile(file,f);//复制文件
}
}
}
}
private static void copyFile(File src, File dest)
{
try
{
BufferedInputStream bi=new BufferedInputStream(new FileInputStream(src));//创建文件输入流
BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream(dest));//创建文件输出流
//写入数据
byte[] buf=new byte[1024];
int len=0;
while((len=bi.read(buf))!=-1)
{
bo.write(buf,0,len);
}
bi.close();
bo.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
复制代码
作者:
找寻小龙猫
时间:
2014-12-12 15:03
很好,但是我觉得有个地方改一下比较好
作者:
找寻小龙猫
时间:
2014-12-12 15:22
手残 了 按回车了,我说的是这个地方
第26 行
//获取java路径名
String path = file.getPath().toLowerCase();
应该获取Java文件的绝对路径名
因为如果在目录(“src”)中查找,会出现问题,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2