自己已经解决了,是因为在复制的方法中没有获取源文件路径,只获取了一个文件名,所以导致源文件获取失败,修改了一下复制方法,接收一个源文件路径
- /
- 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(fromFile,files,toFile);
- }
- System.exit(0);
- }
- //定义一个查找文件方法,接收一个源目录和一个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(File fromFile,String from,File to)
- {
-
- BufferedReader readFile = null ;
- PrintWriter writeFile = null ;
- File fromFiles=new File(fromFile,from);
- //System.out.println(fromFiles);
- File toFile=new File(to,from.replace(".java",".txt"));
- //System.out.println(toFile);
- try
- {
- //通过文件名建立一个文件关联,并且将FileReader对象作为参数传入字符读取缓冲区中,进行高效读取
-
- readFile = new BufferedReader(new InputStreamReader(new FileInputStream(fromFiles)));
- }
- //给定一个目的存储目录,在这个目录下建立相应的复制后的文件,而且这个复制的目的文本文件名是将.java后缀替换成.txt的
- catch(IOException ie)
- {
- System.out.println("源文件获取失败");
- }
- try
- {
- writeFile = new PrintWriter(toFile);
- }
- catch(IOException ie)
- {
- System.out.println("目的文件获取失败");
- }
-
- String line=null;
- try
- {
-
- while((line=readFile.readLine())!=null)//判断:如果读取流没有读到文件的结尾
- {
- writeFile.println(line);//将读取到的内容写入到缓冲流中
- }
- System.out.println("复制文件成功");
-
- }
- catch (IOException e)
- {
- System.out.println("复制文件失败");
- }
- finally
- {
- try
- {
- if(readFile!=null)//如果关联被读取的文件成功,则在执行完毕后关闭该读取流
- readFile.close();
- if(writeFile!=null)//如果写入流创建成功,则在执行完毕后关闭该写入流
- writeFile.close();
-
- }
- catch (IOException e)
- {
- System.out.println("流关闭失败");
- }
-
- }
-
- }
- }
复制代码 |