黑马程序员技术交流社区
标题:
在EditPlus编写的代码,命令行运行没问题,可是用eclipse运...
[打印本页]
作者:
想要那片海
时间:
2015-5-5 19:33
标题:
在EditPlus编写的代码,命令行运行没问题,可是用eclipse运...
本帖最后由 想要那片海 于 2015-5-6 22:13 编辑
第9题:编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
在EditPlus编写的代码,通过dos命令行运行没问题,可是用eclipse运行却失败了,到底是什么原因呢?
/*
步骤:
1、定义一个方法,获取指定目录下的所有.java文件,如果该目录下还有文件夹,则通过递归的方法遍历所有的.java文件,
并且将最终获取的.java型文件的文件名存储到List集合中
2、定义一个copy的方法,方法中通过集合的迭代,依据文件名逐一对文件进行复制,因为都是纯文本型的文件,
所以用到的流是Reader和Writer流,而为了进行高效的读取,则需要使用缓冲流
BufferedReader和BufferedWriter
*/
package com.itheima;
import java.io.*;
import java.util.*;
class Test9
{
public static void main(String[] args)
{
File fromFile=new File("E:\\test9");//制定一个源路径
File toFile=new File("E:\\testCopy9");//定义一个目的路径
List<String> list = new ArrayList<String>();//定义一个数组,用来存储获取源路径中的.java文件名
searchFile(fromFile,list);//在源路径下查找符合条件的文件名,存储到数组中;
Iterator<String> it=list.iterator();//通过数组迭代器获取文件名,进行文件复制
while(it.hasNext())
{
String files=it.next();
System.out.println(files);//这条输出语句可以检检差在查找、复制哪个文件是出现问题
copyFile(files,toFile);
}
}
//定义一个查找文件方法,接收一个源目录和一个List集合
public static void searchFile(File fromFile,List<String> list)
{
if(fromFile.exists() && fromFile.isDirectory())//判断源路径下是不是存在文件并且这是一个有效路径
{
File[] arr=fromFile.listFiles();//创建一个File型的数组,用来存储获取的文件列表
for(File files : arr)//使用高级for循环遍历数组
{
if(files.isDirectory())
searchFile(files,list);//如果获取到的文件还是一个目录则进行递归,进一步查找目录下的文件
else if(files.getName().endsWith(".java"))
list.add(files.getName());//如果是.java类型的文件则将文件名存储到数组中
else
continue;//如果遍历到的文件既不是文件夹也不是.java类型的文件,则结束本次循环,继续执行下一次循环遍历下一个文件
//System.out.println(list);
}
}
else
System.out.println("源路径无效");
}
/**/
//定义一个copy方法,接收一个源文件的文件名和一个目的文件
public static void copyFile(String from,File to)
{
BufferedReader readFile=null;
BufferedWriter writeFile=null;
try
{
//通过文件名建立一个文件关联,并且将FileReader对象作为参数传入字符读取缓冲区中,进行高效读取
readFile=new BufferedReader(new FileReader(new File(from)));
//给定一个目的存储目录,在这个目录下建立相应的复制后的文件,而且这个复制的目的文本文件名是将.java后缀替换成.txt的
writeFile=new BufferedWriter(new FileWriter(new File(to,from.replace("\\.java[ DISCUZ_CODE_0 ]quot;,".txt"))));
String line=null;
while((line=readFile.readLine())!=null)//判断:如果读取流没有读到文件的结尾
{
//System.out.println(line);
writeFile.write(line);//将读取到的内容写入到缓冲流中
writeFile.newLine();//换行
writeFile.flush();//刷新
}
System.out.println("复制文件成功");
}
catch (IOException e)
{
System.out.println("复制文件失败");
}
finally
{
try
{
if(readFile!=null)//如果关联被读取的文件成功,则在执行完毕后关闭该读取流
readFile.close();
}
catch (IOException e)
{
System.out.println("读取流关闭失败");
}
try
{
if(writeFile!=null)//如果写入流创建成功,则在执行完毕后关闭该写入流
writeFile.close();
}
catch (IOException e)
{
System.out.println("写入流关闭失败");
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2