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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 神之梦   /  2013-7-7 15:02  /  9968 人查看  /  182 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看题目做题
回复 使用道具 举报
版主  第三题代码:
  1. package test2;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import java.util.ArrayList;
  10. import java.util.List;

  11. /*
  12. 3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  13. 要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
  14. (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
  15. */

  16. /*
  17. * 思路:
  18. * (1). 通过递归获取指定目录下的java源文件列表  并且使用正则表达式进行过滤  降符合要求的文件添加到文件列表里面
  19. * (2). 对获取到的合格的文件列表复制到指定文件加下面
  20. * */
  21. public class Test3{
  22.         public static void main(String[] args) {
  23.                 File sourceFileDir =new File("D:\\testfolder"); //源文件文件夹对象
  24.                 File destinationFileDir =new File("D:\\testFileCopies"); //目标文件夹对象
  25.                 //1.构建过滤文件名的正则表达式
  26.                         //标准文件名要求:数字+名称.java  e.g. 01Demo.java
  27.                 String fileNameRegex ="((0\\d+)Demo)(\\.java)";
  28.                 List<File> filteredJavaFileList =new ArrayList<File>();
  29.                
  30.                 //2.按照标准生成符合条件的源文件对象列表和目标文件对象列表  ---递归方式生成
  31.                 getQualifiedFilesList(sourceFileDir, filteredJavaFileList, fileNameRegex);
  32.                
  33.                 //3.把源文件列表中的文件复制到目标地址中
  34.                 copyFileList(filteredJavaFileList, destinationFileDir, fileNameRegex);
  35.         }
  36.        
  37.         //把源文件列表中的文件复制到目标地址中
  38.         private static void copyFileList(List<File> filteredJavaFileList,
  39.                         File destinationFileDir, String fileNameRegex) {
  40.                 for(File sourceJavaFile: filteredJavaFileList){
  41.                         //根据正则标准产生按照标准的文件夹名
  42.                         String newFileName = sourceJavaFile.getName().replaceAll(fileNameRegex, "$1$2$3");
  43.                         File destiJavaFile =new File(destinationFileDir, newFileName);
  44.                         System.out.println("原文件名:"+sourceJavaFile.toString()+"-----新文件名:"+ destiJavaFile);
  45.                         //复制单个文件
  46.                         copyFile(sourceJavaFile, destiJavaFile);
  47.                 }
  48.         }
  49.        
  50.         //复制单个文件
  51.         private static void copyFile(File sourceJavaFile, File destiJavaFile) {
  52.                 BufferedReader bufr =null;
  53.                 BufferedWriter bufw =null;
  54.                
  55.                 try{
  56.                         //源(InputStream/Reader)--->文本(Reader)--->设备(硬盘文件 FileReader) --->高效(BufferedReader)
  57.                         bufr =new BufferedReader(new InputStreamReader(new FileInputStream(sourceJavaFile), "GBK"));
  58.                         //目标(OutputStream/Writer)--->文本(Writer)--->设备(硬盘文件 FileWriter) --->高效(BufferedWriter)
  59.                         bufw =new BufferedWriter(new FileWriter(destiJavaFile));
  60.                        
  61.                         String lineContent =null;
  62.                         System.out.println(sourceJavaFile);
  63.                         while((lineContent =bufr.readLine()) !=null){
  64.                                 bufw.write(lineContent);
  65.                                 bufw.newLine();
  66.                                 bufw.flush();
  67.                         }
  68.                 }catch(IOException ioe){
  69.                         System.out.println(ioe.toString());
  70.                 }finally{
  71.                         try{
  72.                                 if(bufr !=null)
  73.                                         bufr.close();
  74.                         }catch(IOException ioe){
  75.                                 System.out.println(ioe.toString());
  76.                         }
  77.                        
  78.                         try{
  79.                                 if(bufw !=null)
  80.                                         bufw.close();
  81.                         }catch(IOException ioe){
  82.                                 System.out.println(ioe.toString());
  83.                         }
  84.                 }
  85.         }

  86.         private static void getQualifiedFilesList(File sourceFileDir,
  87.                         List<File> filteredJavaFileList, String fileNameRegex) {
  88.                 File[] files =sourceFileDir.listFiles();

  89.                 //递归获取符合fileNameRegex标准的java源文件列表
  90.                 for(int x =0; x <files.length; x++){
  91.                         if(files[x].isDirectory()) //遍历的是目录
  92.                                 getQualifiedFilesList(files[x], filteredJavaFileList, fileNameRegex);
  93.                         else{//遍历到的是文件
  94.                                 String oldFileCanonicalName =files[x].getName();
  95.                                 //符合要求规则的全部加进来
  96.                                 if(oldFileCanonicalName.matches(fileNameRegex)){
  97.                                         //添加符合条件的源文件对象
  98.                                         filteredJavaFileList.add(files[x]);
  99.                                 }
  100.                         }
  101.                 }
  102.                
  103.         }
  104. }
复制代码
运行结果如图:

test3.jpg (208.16 KB, 下载次数: 0)

运行测试结果

运行测试结果

源文件夹情况.jpg (82.71 KB, 下载次数: 0)

复制的源文件夹下的文件

复制的源文件夹下的文件

目标文件夹情况.jpg (44.16 KB, 下载次数: 0)

复制的目标夹下的文件

复制的目标夹下的文件

评分

参与人数 1技术分 +3 收起 理由
神之梦 + 3 很给力!

查看全部评分

回复 使用道具 举报
杨晓燕 发表于 2013-7-7 20:36
木有过目不忘的本领啊,虽然看了一遍,做起题来很陌生。。苗,你就说说第一题我哪里丢了一分把 ...

oooo,有道理,收了,哈哈

点评

失误,你的程序可以停止,只是没有按格式输出罢了。。。囧  发表于 2013-7-8 01:45

评分

参与人数 1黑马币 +9 收起 理由
神之梦 + 9 精神损失费^_^

查看全部评分

回复 使用道具 举报
先看看,有时间就弄弄
回复 使用道具 举报
emos-c 来自手机 中级黑马 2013-7-7 21:09:35
25#
看看有没有简单点的
回复 使用道具 举报
本帖最后由 肥猫 于 2013-7-8 21:13 编辑

新的一周又来了,我来答~~.小喵你这题目是挺有意思,可是这个时间限定也太蛋疼了吧.白天没空啊,晚上那么点时间就过24小时.
  1. /**
  2. 功能:键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  3. author:肥猫
  4. */
  5. import java.util.*;

  6. class Test111
  7. {
  8.       public static void main(String[] args)
  9.      {
  10.             Scanner input =new Scanner(System.in);
  11.             System.out.print("请输入要分解质因数的值:");
  12.             int n = input.nextInt();//定义键盘输入值
  13.             System.out.print(n+"=");
  14.             for(int i=2;i<=n;i++)//从最小的质数开始,区间到N为止.
  15.            {
  16.                  while(n%i==0&&n!=i)//只有当N模的尽时切本身不为质数,说明其还能分解,才进行分解操作.
  17.                 {
  18.                        System.out.print(i+"*");
  19.                        int temp=0;
  20.                        n=n/i;
  21.                 }
  22.                  if(n==i)//当N为质数不能在分解时就输出.
  23.                 {
  24.                        System.out.println(i);
  25.                 }
  26.            }
  27.     }
  28. }
复制代码

点评

提交的代码的排版弄一弄更好  发表于 2013-7-8 14:31

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2 很给力!

查看全部评分

回复 使用道具 举报
等到我花儿都谢了.
回复 使用道具 举报
回帖看题
回复 使用道具 举报
本帖最后由 宋智超 于 2013-7-7 21:32 编辑

第一题:
  1. <FONT face=宋体></FONT>
复制代码

回复 使用道具 举报
第一题:
//键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
import java.util.Scanner;
class N1 {
public static void main(String[] args) {
  Scanner num = new Scanner(System.in);
  System.out.println("请输入所要分解质因数的数:");
  int n = num.nextInt();                              //以上为获取一个整数
  System.out.print(n+"=");       //先输出最终结果的前面部分,后面用累除做出质因数后,按顺序添加。
  for (int i = 2; i < n+1 ;i++){      //循环尝试可能的质因数
   while(n%i==0 && n!=i) {       //判断是否为质因数,如果是则顺序输出,此时给n除以得出的质因数,以便进行下一次判断。
    n/=i;   
    System.out.print(i+"*");   
   }  
   if(n==i) {          //判断是否将质因数求完
    System.out.print(i);   
    break;
   }
  }  
}
}

点评

代码要放入代码块中  发表于 2013-7-8 14:33

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
看看~~~~求技术分~~~~
回复 使用道具 举报


就把这里System.out.println("数组中相同的素数的角标为:"+halfSeach(a, 73));
改成System.out.println("数组中相同的素数的角标为:"+halfSeach(a, a[n])); 是吧?

点评

可能是我的题目没表述清楚,发现好几个哥们都是把数组的最后一个拿来折半查找。折半查找的思路是正确的,但是  发表于 2013-7-8 02:33
最后一个不一定就是相同的那个元素,如果已知最后一个就是相同的那个数了,就不需要去找了。  发表于 2013-7-8 02:33
现在我在题目中又加了个说明,哥们你看下,如果还是没表述清楚望告知。鉴于此第二题可再次提交,明天我再加分  发表于 2013-7-8 02:33
回复 使用道具 举报
先看看题目:)
回复 使用道具 举报
我先看看题~~
回复 使用道具 举报
  1. package com.itheima.bbs.c5a3;

  2. import java.util.Scanner;

  3. /**
  4. * 1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  5. */
  6. public class test1
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 Scanner input = new Scanner(System.in);
  11.                 System.out.println("please input a positive integer :");
  12.                 int n ;
  13.                 while((n=input.nextInt()) <= 0)//只有输入的正数才行
  14.                 {
  15.                         System.out.println("input a positive integer:");
  16.                 }
  17.                
  18.                 StringBuilder sb = new StringBuilder();//构建输出字符串
  19.                 int count=0;//记录质因子的个数
  20.                 for(int i=2;i<=n;i++)//从最小的质数开始,依次分解完所有的质因子后,再分解下一个
  21.                 {
  22.                         if (n%i==0) //是因子才分解
  23.                         {
  24.                                 count++;
  25.                                 if(count==1)
  26.                                 {
  27.                                         sb.append(n+"="+i);//首个因子出现时,等式的初始化
  28.                                 }
  29.                                 else
  30.                                 {
  31.                                         sb.append("*"+i);//其它因子累乘到后边
  32.                                 }
  33.                                
  34.                                 n=n/i;//用质因子i分解n后再赋值给n
  35.                                
  36.                                 i--;//重新尝试i整除n,可能i的多次幂为n的因子
  37.                         }
  38.                 }//end for
  39.                
  40.                 //输出结果
  41.                 System.out.println(sb.toString());
  42.                
  43.         }
  44. }
复制代码
  1. package com.itheima.bbs.c5a3;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;

  5. /**
  6. * 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  7.       这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  8. */
  9. public class test2
  10. {
  11.         public static void main(String[] args)
  12.         {       
  13.                 List<Integer> primes = new ArrayList<Integer>();
  14.                 primes.add(2);//2 为素数先加进去
  15.                 for(int i=3; i<=100; i+=2)
  16.                 {
  17.                         if(isPrime(i))
  18.                                 primes.add(i);
  19.                 }
  20.                 //随机生成一个索引
  21.                 int index = new Random().nextInt(primes.size());
  22.                 //添加素数
  23.                 primes.add(primes.get(index));
  24.                 int size = primes.size();
  25.                 //输出结果
  26.                 printArray(primes);
  27.                
  28.                 int s = primes.get(size-1);//要找的数
  29.                 System.out.println("要找的数:"+s);
  30.                 //查找与添加的随机素数相同的素数(因为添加时,从小到大依次添加,所以元素已有序,符合二叉查找的条件)
  31.                 int result = binSearch(s, primes.subList(0, size-1));
  32.                 if(result!=-1)
  33.                 {
  34.                         System.out.println("找到了"+s+",其在数组中的位置:"+result);
  35.                 }
  36.                 else
  37.                 {
  38.                         System.out.println("没有找到");
  39.                 }
  40.         }
  41.         /**
  42.          * 在集合list中查找元素i
  43.          */
  44.         private static int binSearch(Integer i, List<Integer> list)
  45.         {       
  46.                 Integer[]array = list.toArray(new Integer[list.size()]);
  47.                 int high = list.size()-1;
  48.                 int low = 0;
  49.                 int mid;
  50.                 while(low<=high)
  51.                 {
  52.                         mid = (low+high)/2;
  53.                         if(array[mid] < i)
  54.                         {
  55.                                 low = mid + 1; //在右半部查找
  56.                         }
  57.                         else if(array[mid] > i)
  58.                         {
  59.                                 high = mid - 1; //在左半部查找
  60.                         }
  61.                         else
  62.                                 return mid;
  63.                 }
  64.                
  65.                 return -1;//没有找到则返回-1
  66.                
  67.         }

  68.         private static void printArray(List<Integer> primes)
  69.         {
  70.                 for(int i=1,size=primes.size(); i<size; i++)
  71.                 {       
  72.                         //十个一行输出
  73.                                 System.out.print((i-1)+":"+primes.get(i-1)+" ");
  74.                                 if(i%10 == 0)
  75.                                         System.out.println();
  76.                 }
  77.                 System.out.println();
  78.         }

  79.         /**
  80.          * 判断i是否为素数
  81.          */
  82.         private static boolean isPrime(int i)
  83.         {       
  84.                 for(int j=2; j<i; j++)
  85.                 {
  86.                         if(i%j == 0)
  87.                                 return false;
  88.                 }
  89.                 return true;
  90.         }
  91. }
复制代码
  1. package com.itheima.bbs.c5a3;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;

  9. /**
  10. * 3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  11.              要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
  12.             (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
  13. */
  14. /**
  15. * 首先声明不能以数字开头命名java源文件
  16. */
  17. public class test3
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 File dir = new File(".");//当前文件路径是工程文件夹内部
  22.                 System.out.println(dir.getAbsolutePath());
  23.                 //递归遍历该文件夹,并输出所有文件
  24.                 copyFiles(dir);
  25.                 /*String str = "Demo01.java";
  26.                 String str2 = renameFile(str);
  27.                 System.out.println(str2);*/
  28.         }
  29.         /**
  30.          * 递归目录拷贝.java类型文件
  31.          * @param dir 指定的根目录
  32.          */
  33.         private static void copyFiles(File dir)
  34.         {       
  35.                 //进入目录
  36.                 File[]fs = dir.listFiles();
  37.                 for(File f : fs)
  38.                 {
  39.                         if(f.isDirectory())//遍历目录
  40.                                 copyFiles(f);
  41.                         else if(f.getName().endsWith(".java"))//找到以java为后缀名的文件
  42.                         {       
  43.                                 copyTo(f,"./bak");//将所有.java类型的文件拷贝到当前文件夹下bak目录中
  44.                         }
  45.                 }
  46.         }
  47.         /**
  48.          * 将文件拷贝到指定目录
  49.          * @param fileName
  50.          * @param destDir
  51.          */
  52.         private static void copyTo(File file, String destDir)
  53.         {
  54.                 String newFileName = renameFile(file.getName());
  55.                 //通过字符流来复制
  56.                 BufferedReader br = null;
  57.                 BufferedWriter wr = null;
  58.                 try
  59.                 {
  60.                         br = new BufferedReader(new FileReader(file.getAbsoluteFile()));
  61.                         File destPath = new File(destDir);
  62.                        
  63.                         //不存在目的目录要创建
  64.                         if(!destPath.exists()) destPath.mkdirs();
  65.                        
  66.                         wr = new BufferedWriter(new FileWriter(destDir+"/"+newFileName));
  67.                         String line = null;
  68.                         while(null != (line=br.readLine()))
  69.                         {
  70.                                 wr.write(line);
  71.                                 wr.flush();
  72.                         }
  73.                 } catch (FileNotFoundException e)
  74.                 {
  75.                         e.printStackTrace();
  76.                 } catch (IOException e)
  77.                 {
  78.                         e.printStackTrace();
  79.                 }
  80.                 finally
  81.                 {
  82.                         try
  83.                         {       
  84.                                 if(br!=null)
  85.                                 br.close();
  86.                         } catch (IOException e)
  87.                         {
  88.                                 e.printStackTrace();
  89.                         }
  90.                         try
  91.                         {       
  92.                                 if(wr!=null)
  93.                                         wr.close();
  94.                         } catch (IOException e)
  95.                         {
  96.                                 e.printStackTrace();
  97.                         }
  98.                 }
  99.         }
  100.         /**
  101.          * 重新命名文件
  102.          * @param fileName
  103.          * @return 重新命名后的文件名
  104.          */
  105.         private static String renameFile(String fileName)
  106.         {       
  107.                 /*String regex = "^(\\D+)(\\d+)(\\..+)$";//匹配以数字结尾的字符串
  108.                 String replacement = "$2$1$2$3";*/
  109.                
  110.                 String regex = "^(\\d+)(\\D*)(\\..+)$";//匹配以数字开头的字符串
  111.                 String replacement = "$1$2$1$3";
  112.                 String newFileName = fileName.replaceFirst(regex, replacement);
  113.                
  114.                 return newFileName;
  115.         }

  116. }
复制代码

点评

可能是我的题目没表述清楚,发现好几个哥们都是把数组的最后一个拿来折半查找。折半查找的思路是正确的,但是  发表于 2013-7-8 02:33
最后一个不一定就是相同的那个元素,如果已知最后一个就是相同的那个数了,就不需要去找了。  发表于 2013-7-8 02:32
现在我在题目中又加了个说明,哥们你看下,如果还是没表述清楚望告知。鉴于此第二题可再次提交,明天我再加分  发表于 2013-7-8 02:32

评分

参与人数 1技术分 +5 收起 理由
神之梦 + 5 第一题和第三题

查看全部评分

回复 使用道具 举报

运行结果

点评

代码放入回复工具上有个这样的“<>”里面  发表于 2013-7-8 14:42

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 lanbuohan 于 2013-7-8 01:56 编辑

  1. <P>package cn.itcast.exam;


  2. public class Test2 {

  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. </P>
  9. <P> </P>
  10. <P>for (int i = 2; i <100; i++)
  11.   {            
  12.    for (int j = 2; j <= i; j++)      
  13.    {           
  14.     if (i == j)  
  15.     {//      
  16.      System.out.println(i);      
  17.     }   
  18.     if (i % j == 0)  
  19.     {           
  20.      break;   
  21.     }      
  22.    }     
  23.   }




  24. }</P>
  25. <P>
  26. }
  27. </P>
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我看帖的
回复 使用道具 举报
只做了第二题和第三题,明天还得上班啊!能力有限,做得很慢啊!
不妥之处,还请指正!
第二题,代码如下:
  1. /*
  2. 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机
  3. 添加其中的一个素数)
  4. 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,
  5. 也可利用随机方法产生)
  6. */

  7. /*
  8. 基本思路:1,用getPrime方法的for循环嵌套找出1到100之间的素数,并将其存入集合中;(1不是素数)
  9. 2,将集合转换为数组;
  10. 3,用find方法的for循环嵌套找出相同的素数,并输出到控制台;
  11. 4,运行结果:所有的素数是:{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,
  12. 67,71,73,79,83,89,97},共25个;最后的相同的素数是73;
  13. @author:蚂蚁搬家;
  14. */

  15. import java.util.*;

  16. public class PrimeNumber
  17. {
  18.         public static void main(String [] args)
  19.         {
  20.                         ArrayList<Integer> list = new ArrayList<Integer>();                //新建集合,用于存储素数;
  21.                         getPrime(list);                        //获取1到100之间的素数;
  22.                        
  23.                         System.out.println(list);                //输出1到100之间的素数;
  24.                                
  25.                         Integer[] prime = list.toArray(new Integer[list.size()]);
  26.                        
  27.                         find(prime);                //找出数组中的相同素数;
  28.                        
  29.         }       
  30.        
  31.         public static void getPrime(ArrayList<Integer> tempList)
  32.         {
  33.                         int count = 0;                //计数器,素数的个数;
  34.                        
  35.                         outer:                //循环语句的标号;
  36.                         for(int i=2; i<=100; i++)                //由于1本身不是素数,所以从2开始;
  37.                         {
  38.                                 /*用i除以从2开始到小于i的最大整数,如果能整除,说明i不是素数,跳出内层循环,进入外层循环;
  39.                                 如果内层循环结束还不能整除,说明i是素数,存入集合中,计数器加1;
  40.                                 */
  41.                                 for(int j=2; j < i; j++)
  42.                                 {
  43.                                                 if(i%j == 0)       
  44.                                                         continue outer;
  45.                                 }
  46.                                 tempList.add(i);
  47.                                 count = count+1;
  48.                         }
  49.                         //向集合中随机添加一个1到100之间的素数;
  50.                         tempList.add(tempList.get(count-5));
  51.         }
  52.        
  53.         public static void find(Integer[] tempPrime)
  54.         {
  55.                         //用第一个素数跟它后面的每个素数比较,若相等,输出相等的素数,若不等,则用第二素数跟后面的每个素数比较,以此类推;
  56.                         for(int i=0; i<tempPrime.length; i++)
  57.                         {
  58.                                
  59.                                 for(int j=i+1; j<tempPrime.length; j++ )
  60.                                 {
  61.                                         if(tempPrime[i] == tempPrime[j])
  62.                                         {
  63.                                                 System.out.println("相同的那个素数是:" + tempPrime[i]);       
  64.                                                 return ;               
  65.                                         }
  66.                                        
  67.                                 }       
  68.                                
  69.                         }
  70.         }
  71. }
复制代码
第三题:
  1. /*
  2. 在一个文件夹内有文件夹和文件,文件名的格式为:数字+daxiang.java。
  3. 要求:把所有的.java文件复制一份,变为文件名格式为:数字+daxiang+数字.java。
  4. (其中数字是相对应的,名称由字母组成。在本例中,文件名应该由"数字+daxiang.java"变为"数字+daxiang+数字.java")
  5. */
  6. /*
  7. 基本思路:1,用递归方法获取到源目录下的java文件;
  8. 2,用缓冲流将源文件复制到目的文件夹下的目的文件;
  9. 3,用字符串的split方法拆分并重新组合出目的文件的文件名;
  10. @author:蚂蚁搬家;
  11. */

  12. import java.io.*;

  13. public class CopyFile
  14. {
  15.                 public static void main(String [] args)
  16.                 {
  17.                                 File file = new File("F:\\答题有分");                        //源文件夹封装为File对象;
  18.                                 get(file);                                                                                                                                //调用get方法实现题目要求;
  19.                 }
  20.                
  21.                 /*用递归方法获取源目录下的每个java文件,然后调用copyFile方法,将源文件复制到另一个文件夹中,
  22.                 并对文件按照题目要求进行更名;*/
  23.                 public static void get(File srcFile)                                
  24.                 {
  25.                                 File[] files  = srcFile.listFiles();                //列出源目录下的所有文件和目录;
  26.                                
  27.                                 for(File file : files)
  28.                                 {
  29.                                         if(file.isDirectory())                                //如果是目录,递归调用get方法;
  30.                                         {
  31.                                                         get(file);
  32.                                         }       
  33.                                         else
  34.                                         {
  35.                                                 if(file.getName().endsWith(".java"))                //如果是java文件,调用copyFile方法;
  36.                                                 {
  37.                                                         copyFile(file);       
  38.                                                 }
  39.                                         }
  40.                                 }
  41.                 }
  42.                
  43.                 //将源文件复制到目的文件夹,并对源文件按照题目要求更名;
  44.                 public static void copyFile(File file)
  45.                 {
  46.                                 BufferedReader br = null;
  47.                                 BufferedWriter bw = null;
  48.                                 try
  49.                                 {
  50.                                                 br = new BufferedReader(new FileReader(file));
  51.                                                
  52.                                                 String srcName = file.getName();                //获取源文件的文件名;
  53.                                                 String[] tempName = srcName.split("daxiang");         //将源文件名用“daxiang”拆分,拆分出来的结果是“数字”和“.java”;
  54.                                                 String lastedName = tempName[0] + "daxiang" + tempName[0] + tempName[1];        //重新组合出来的结果就是"数字+daxiang+数字.java";
  55.                                                
  56.                                                 bw = new BufferedWriter(new FileWriter("F:\\目标文件夹\\" + lastedName));
  57.                                                
  58.                                                 String buf = null;
  59.                                                 while((buf = br.readLine()) != null)
  60.                                                 {
  61.                                                         bw.write(buf);
  62.                                                         bw.newLine();
  63.                                                         bw.flush();       
  64.                                                 }
  65.                                 }
  66.                                 catch(IOException e)
  67.                                 {
  68.                                         System.out.println("文件复制失败!");       
  69.                                 }
  70.                                
  71.                                 finally
  72.                                 {
  73.                                         try
  74.                                         {
  75.                                                         if(br != null)
  76.                                                                 br.close();
  77.                                         }       
  78.                                         catch(IOException e)
  79.                                         {
  80.                                                        
  81.                                         }
  82.                                        
  83.                                         try
  84.                                         {
  85.                                                 if(bw != null)
  86.                                                 bw.close();       
  87.                                         }
  88.                                         catch(IOException e)
  89.                                         {
  90.                                                        
  91.                                         }
  92.                                 }
  93.                 }
  94. }

  95.        

复制代码
不足之处,敬请指出!在此,先谢过了!{:soso_e183:}

点评

第三题测试时出现角标越界异常、、、  发表于 2013-7-8 15:09
第二题整个程序代码精简,思路清晰,赞!但搜索算法效率不是很高  发表于 2013-7-8 15:08

评分

参与人数 1技术分 +3 收起 理由
神之梦 + 3 第二题的

查看全部评分

回复 使用道具 举报
晒太阳。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马