A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

苯小孩hehe

初级黑马

  • 黑马币:30

  • 帖子:45

  • 精华:0

编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt (还没学到^^)

6 个回复

倒序浏览
  1. package com.itheima;

  2. import java.io.*;
  3. import java.util.*;

  4. public class Test {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 //定义集合存储.java的文件名
  8.                 ArrayList<String> list = new ArrayList<String>();
  9.                 //关联源文件路径
  10.                 File src = new File("E:\\JAVA\\黑马\\exam");
  11.                  //关联目的文件路径
  12.                 File des = new File("E:\\JAVA\\黑马\\txt");
  13.                 //判断目的文件是否存在,不存在就创建
  14.                 if(!des.exists())
  15.                         des.mkdirs();
  16.                 //将源文件中.java的文件名存入到集合中
  17.                  fileTolist(src,list);
  18.                 //遍历集合中.java的文件名
  19.                  for(String fileName : list)
  20.                  {
  21.                         //调用方法,将源文件中.java的文件存入到目的文件夹中,并将扩展名改为.txt
  22.                          writeTofile(src, des, fileName);
  23.                  }
  24.         }
  25.         /**
  26.          * 将源文件中.java的文件名存入到集合中
  27.          * @param file
  28.          * @param list
  29.          */
  30.         public static void fileTolist(File file,List<String> list)
  31.         {
  32.                 //获取源文件夹中的文件
  33.                  File[] files = file.listFiles();
  34.                  for(File f : files)
  35.                  {
  36.                          //遍历文件并将.java的文件名存入到集合中
  37.                          list.add(f.getName());
  38.                  }
  39.         }
  40.                
  41.            //将源文件中.java的文件存入到目的文件夹中
  42.         public static void writeTofile(File src,File des, String fileName) throws Exception
  43.         {
  44.                 BufferedReader bfr = new BufferedReader(new FileReader(new File(src, fileName)));
  45.                 //.java文件改名为.txt文件
  46.                 BufferedWriter bfw = new BufferedWriter(new FileWriter(new File(des,fileName.replace(".java", ".txt"))));
  47.                 String line = null;
  48.                 while((line=bfr.readLine())!=null)
  49.                 {
  50.                         bfw.write(line);
  51.                         bfw.newLine();
  52.                         bfw.flush();
  53.                 }
  54.                 //关闭资源
  55.                  bfw.close();
  56.                  bfr.close();
  57.                
  58.                 }
  59.         }
复制代码
回复 使用道具 举报
这是看别人写的,不过感觉fileToList方法有点问题
应该是加个匿名内部类判断.java后缀
  1. public static void fileTolist(File file,List<String> list)
  2.         {
  3.                 //获取源文件夹中后缀为.java的文件
  4.                  File[] files = file.listFiles(
  5.                                  new FilenameFilter()
  6.                                  {
  7.                                          public boolean accept(File dir,String name)
  8.                                          {
  9.                                                  return name.endsWith(".java");
  10.                                          }
  11.                                          
  12.                                  }
  13.                                  );
  14.                  for(File f : files)
  15.                  {
  16.                          //遍历文件并将.java的文件名存入到集合中
  17.                          list.add(f.getName());
  18.                  }
  19.         }
复制代码
回复 使用道具 举报
这个是我写的方法,凑合看吧,我也是初学者。
  1. package com.itheima;
  2. //9、 编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
  3. import java.io.*;
  4. import java.util.ArrayList;

  5. public class test9 {
  6.         //顶一个集合存入File类型对象
  7.         static ArrayList<File>array= new ArrayList<File>();
  8.         public static void showDir(File dir)//定义一个递归方法取出传入路径的所有文件
  9.         {
  10.                 //定义一个File数组接受目录中的文件
  11.                 File[] fi=dir.listFiles();
  12.                 //把当前接受的目录存入数组
  13.                 array.add(dir);
  14.                 for(int x=0;x<fi.length;x++)
  15.                 {
  16.                 if(fi[x].isDirectory())//判断否是一个目录
  17.                         {
  18.                         showDir(fi[x]);//如果是目录再次调用本方法
  19.                         }
  20.                         else{       
  21.                                 if(fi[x].toString().endsWith(".java"))//如果不是目录判断当前文件是否是.java结尾
  22.                                         array.add(fi[x]);//如果是加入集合
  23.                         }               
  24.                 }       
  25.         }
  26.         public static void Write(File dir1,File dir2) //定义写出方法,需要有源和目的地,
  27.         {
  28.                 showDir(dir1);//先把接受的远传入递归方法取出所有目录和文件路径
  29.                
  30.                 for(File f1:array)//因为流无法直接创建带有路径的文件,所以遍历集合中的所有目录和文件,创建文件夹
  31.                 {
  32.                         String ss=f1.toString().replaceAll("\\\\","\\\\\\\\");
  33.                          ss=ss.replaceAll(".java",".txt");
  34.                         StringBuffer sb1=new StringBuffer(ss);
  35.                         sb1.replace(0, dir1.getPath().length()+1,dir2.getPath().replaceAll("\\\\","\\\\\\\\"));
  36.                         File f2=new File(sb1.toString());               
  37.                         makeDir(f2);       
  38.                 }
  39.                 for(File f1:array)//遍历集合中的所有目录和文件,创建文件
  40.                 {
  41.                         String ss=f1.toString().replaceAll("\\\\","\\\\\\\\");
  42.                          ss=ss.replaceAll(".java",".txt");
  43.                         StringBuffer sb1=new StringBuffer(ss);
  44.                         sb1.replace(0, dir1.getPath().length()+1,dir2.getPath().replaceAll("\\\\","\\\\\\\\"));
  45.                         File f2=new File(sb1.toString());       
  46.                         Writedir(f1,f2);                       
  47.                 }
  48.         }

  49.         public static void makeDir(File f1)
  50.         {
  51.                 if(!f1.getParentFile().exists())//获取父路径是否存在。如果不存在则创建
  52.                 {
  53.                         f1.getParentFile().mkdir();
  54.                 }
  55.         }
  56.         public static void Writedir(File f1,File f2)
  57.         {
  58.                 //创建读取流和输出流
  59.                 BufferedInputStream bufr = null;
  60.                 BufferedOutputStream buot = null;
  61.        
  62.                 if(!f1.isDirectory())//判断是否是目录
  63.                 {
  64.                         try {
  65.                                 bufr= new BufferedInputStream(new FileInputStream(f1));//如果不是把文件读出来
  66.                         } catch (FileNotFoundException e) {
  67.                                
  68.                                 throw new RuntimeException("文件读取失败");//如果文件读取不到,抛出异常
  69.                         }
  70.                 }
  71.                 if(!f2.exists())//判断文件或目录是否存在
  72.                 {
  73.                          try {
  74.                                 buot=new BufferedOutputStream(new FileOutputStream(f2));//创建输出流
  75.                         } catch (FileNotFoundException e) {
  76.                                 throw new RuntimeException("文件写入失败");
  77.                         }
  78.                 }
  79.                 try
  80.                 {//当两个流都不为空时,普通的流输出方法
  81.                         if(bufr!=null &&buot!=null){
  82.                                 int len=0;
  83.                                 byte [] b=new byte[1024];
  84.                                 while((len=bufr.read(b))!=-1)
  85.                                 {
  86.                                         buot.write(b);
  87.                                         buot.flush();
  88.                                 }
  89.                         }
  90.                 }
  91.                 catch(IOException e)
  92.                 {
  93.                         throw new RuntimeException("文件写入失败");
  94.                 }
  95.                 finally//最后关闭流
  96.                 {
  97.                         try
  98.                         {
  99.                                 if(!(bufr==null))
  100.                                         bufr.close();
  101.                                 if(!(buot==null))
  102.                                         buot.close();
  103.                         }
  104.                         catch(IOException e)
  105.                         {
  106.                                 throw new RuntimeException("操作失败");
  107.                         }
  108.                        
  109.                 }
  110.        
  111.         }
  112. public static void main(String[] args)  {
  113.         File dir1=new File("E:\\1");
  114.         File dir2=new File("F:\\1");       
  115.         Write(dir1,dir2);
  116.        
  117. }
  118. }
复制代码
回复 使用道具 举报
我自己写的,你参考一下
  1. import java.util.*;
  2. import java.io.*;
  3. public class FileList {

  4.         public static void main(String[] args) throws Exception {
  5.                 File[] copys = new File("D:"+File.separator+"0").listFiles();//获得D:/0/目录下全部文件
  6.                 List<InputStream> islist = new ArrayList<InputStream>();//字节流 ,读取文件
  7.                 for(int i = 0;i<copys.length;i++){
  8.                         islist.add(new FileInputStream(copys[i]));
  9.                 }
  10.                 List<File> pastes = new ArrayList<File>(); //获得需要拷贝到的目标文件,位置为D:/1/目录
  11.                 for(int i = 0 ;i<copys.length;i++){
  12.                         pastes.add(new File("D:"+File.separator+"1"+File.separator+copys[i]
  13.                                         .getName().replace("java", "txt")));
  14.                 }
  15.                 List<OutputStream> oslist = new ArrayList<OutputStream>();  //字节输出流
  16.                 for(int i = 0;i<copys.length;i++){
  17.                         oslist.add(new FileOutputStream(pastes.get(i)));
  18.                 }
  19.                 for(int i = 0;i<copys.length;i++){
  20.                         byte[] b = new byte[(int) copys[i].length()];
  21.                         islist.get(i).read(b);
  22.                         System.out.print("读取"+copys[i].getName()+"成功" +"----------------->");
  23.                         oslist.get(i).write(b);
  24.                         System.out.println("写入"+pastes.get(i).getName()+"成功" );
  25.                         islist.get(i).close();
  26.                 }
  27.                
  28.         }

  29. }
复制代码


回复 使用道具 举报
好厉害,好厉害。。。。
回复 使用道具 举报
LLLLL 中级黑马 2015-10-10 18:13:03
7#
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马