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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

黑马测试题,还没有学到这。请问怎么做?
编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt

17 个回复

倒序浏览
本帖最后由 沿途小将 于 2014-8-22 17:55 编辑

我只提供我的思路;
1,实例文件输入流关联你的.java文件,并读入程序【用到的类有FileReader或者FileInputStream】
2.实例文件输出流关联将要写入的.txt文件(没有的话会自动建立),将你第一步的数据写入、txt文件即可【用到的类有FileWriter或者FileOutputStream】
3,关闭两个流。(有异常)。
回复 使用道具 举报
  1. import java.io.*;
  2. import java.util.*;;
  3. import java.lang.*;


  4. public class UpdateFile
  5. {
  6.         public static void main(String[] args)throws IOException{
  7.           
  8.           
  9.            updateFile("指定目录", "拷贝目录");
  10.           
  11.         }
  12.     /**
  13.          * 将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
  14.          *@param fileDir 文件路径 toDir 存放路径
  15.          */
  16.          public static void updateFile(String fileDir, String toDir) throws IOException{
  17.          
  18.              String filePath = fileDir.replaceAll("\\*", "/");
  19.                  String updatePath = toDir.replaceAll("\\*", "/");

  20.              File file = new File(filePath);
  21.                  
  22.                  if(file.listFiles()!=null){
  23.                  
  24.                     for(File fileChild:file.listFiles()){

  25.                                 if(fileChild.getName().indexOf(".java")!=-1){
  26.                                    //设置新的扩展名
  27.                                    String fileName = fileChild.getName().substring(0,fileChild.getName().indexOf(".java")) + ".txt";

  28.                                    copy(fileChild,updatePath + "/" + fileName);
  29.                                 }
  30.                        
  31.                         }
  32.                  }
  33.              
  34.          }

  35.          /**
  36.          * 复制文件到指定位置
  37.          *
  38.          */
  39.          public static void copy(File fileChild, String fileDir)throws IOException{
  40.          
  41.             File file = new File(fileDir);

  42.                 FileInputStream is =  new FileInputStream(fileChild);
  43.                 FileOutputStream os = new FileOutputStream(file);

  44.                 byte[] buf = new byte[1024];
  45.                 int len;

  46.                 while((len=is.read(buf))!=-1){
  47.                
  48.                      os.write(buf, 0, len);
  49.                 }

  50.                 os.flush();
  51.                 is.close();
  52.                 os.close();
  53.             
  54.          }

  55.          
  56. }
复制代码
回复 使用道具 举报
这是刚刚写的代码,测试过可以通过,希望能帮到你,加油
回复 使用道具 举报
  1. package com.heima.test;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.util.ArrayList;
  8. import java.util.List;

  9. public class CopyTest {

  10.         /**
  11.          * @param args
  12.          */
  13.         public static void main(String[] args) throws Exception{
  14.                 ArrayList<String> list = new ArrayList<String>();//定义集合存储Java文件的名字
  15.                
  16.                 File src = new File("D:\\test\\java");         //源文件路径
  17.                 File des = new File("D:\\test\\txt");          //目的文件路径
  18.                 if(!des.exists())                              //判断目的文件是否存在,不存在就创建
  19.                         des.mkdirs();
  20.                
  21.                 fileTolist(src,list);                           //将源文件中的Java文件的名字存入到集合中
  22.                 for(String fileName : list){                    //高级for循环遍历集合中Java文件的名字
  23.                         writeTofile(src, des, fileName);            //将源文件中的Java文件存入到目的文件夹中
  24.                 }
  25.         }
  26.        
  27.        
  28.         //将源文件中的Java文件的名字存入到集合中
  29.         public static void fileTolist(File file,List<String> list){
  30.                 File[] files = file.listFiles();              //获取源文件夹中的文件
  31.                
  32.                 for(File f : files){                           //遍历文件并将文件的Java文件的名字存入到集合中
  33.                         list.add(f.getName());
  34.                 }
  35.         }
  36.        
  37.        
  38.         //将源文件中的Java文件存入到目的文件夹中
  39.         public static void writeTofile(File src,File des, String fileName)throws Exception{
  40.                
  41.                 BufferedReader bfr = new BufferedReader(new FileReader(new File(src, fileName)));
  42.                 BufferedWriter bfw = new BufferedWriter(new FileWriter(new File(des,fileName.replace(".java", ".txt"))));
  43.                
  44.                 String line = null;
  45.                 while((line=bfr.readLine())!=null){
  46.                         bfw.write(line);
  47.                         bfw.newLine();
  48.                         bfw.flush();
  49.                 }
  50.                
  51.                 bfw.close();
  52.                 bfr.close();
  53.         }

  54. }
复制代码
回复 使用道具 举报 2 0
  • 先提供思路
  • !--遍历源文件下的所有.JAVA文件
  • !--创建读写流,new FileReader("源文件.java"),new FileWriter("目的路径+文件名.txt")
  • !--使用BufferReader.read,读文件,BufferWriter,write写文件
  • !--循环3.的操作
  • !--关闭缓存,br.close(),bw.close()
回复 使用道具 举报
学习。。。
回复 使用道具 举报
将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
回复 使用道具 举报
package examText;



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

/**
* 9、 编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
*/

public class Test9 {

        public static void main(String[] args) throws Exception{
                ArrayList<String> list = new ArrayList<String>();//定义集合存储Java文件的名字
                File src = new File("E:\\JAVA\\黑马\\exam.doc");//源文件路径
                File des = new File("E:\\JAVA\\黑马\\txt"); //目的文件路径
                if(!des.exists())//判断目的文件是否存在,不存在就创建
                        des.mkdirs();
                 fileTolist(src,list);//将源文件中的Java文件的名字存入到集合中
                 for(String fileName : list){//高级for循环遍历集合中Java文件的名字
                         writeTofile(src, des, fileName);//将源文件中的Java文件存入到目的文件夹中
                 }
        }
       
        //将源文件中的Java文件的名字存入到集合中
        public static void fileTolist(File file,List<String> list){
                 File[] files = file.listFiles();//获取源文件夹中的文件
                 for(File f : files){//遍历文件并将文件的Java文件的名字存入到集合中
                         list.add(f.getName());
                 }
        }
               
           //将源文件中的Java文件存入到目的文件夹中
        public static void writeTofile(File src,File des, String fileName)throws Exception{
                BufferedReader bfr = new BufferedReader(new FileReader(new File(src, fileName)));
                BufferedWriter bfw = new BufferedWriter(new FileWriter(new File(des,fileName.replace(".java", ".txt"))));
                String line = null;
                while((line=bfr.readLine())!=null){
                        bfw.write(line);
                        bfw.newLine();
                        bfw.flush();
                }
                 bfw.close();
                 bfr.close();
               
                }
               


        }

点评

你添加.Java文件怎么添加 的你告诉我?你的代码简直可笑  发表于 2016-1-11 13:00
回复 使用道具 举报
  1. package exam;
  2. import java.io.*;
  3. /*
  4. * 3、编写程序,将指定目录下所有的.java文件拷贝到另一个目的中,将扩展名改为.txt
  5. */
  6. public class Test3 {
  7. public static void main(String[] args) throws IOException {
  8.         demo();
  9. }
  10. public static void demo() throws IOException{
  11.         File file=new File("H:\\t");
  12.         FileWriter fw=new FileWriter("H:\\txt\\2.txt");
  13.         File arr[]=file.listFiles();
  14.         for(File a:arr){
  15.         if(a.toString().endsWith(".java")){
  16.                 System.out.println(a);
  17.                 fw.write(a.toString());
  18.                
  19.         }else{
  20.                 System.out.println("没有jpg文件");
  21.                 break;
  22.         }
  23.         }
  24.         fw.close();
  25. }

  26. }
复制代码

点评

我没试,说几个看法,你只是改了扩展名,然后把.Java的文件名通通装入了2.TXT,而不是转移拷贝一个文件并修改扩展名为.TXT 。 方向 简直错的离谱  发表于 2016-1-11 13:58
回复 使用道具 举报 0 1
package com.itheima;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;

public class TextCopy {

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO Auto-generated method stub
               
                Scanner scan =new Scanner(System.in);
                System.out.print("请输入文件的路径及名称:");
                String file=scan.next();
               
                File tempFIle=new File(file.trim());
                String fileName=tempFIle.getName();
                sop("文件为:"+fileName);
               
                BufferedReader bufr=null;
                BufferedWriter bufw=null;
                try
                {
                        bufr=new BufferedReader(new FileReader(file));
                        bufw=new BufferedWriter(new FileWriter("F:Copy.java"));
                        String line=null;
                        while((line=bufr.readLine())!=null)
                        {
                                sop(line);
                                bufw.write(line);
                                bufw.newLine();
                        }
               
                }
                catch(Exception e)
                {
                        e.printStackTrace();
                }
                finally
                {
                        try
                        {
                                if(bufr!=null)
                                        bufr.close();
                        }
                        catch(Exception e)
                        {
                                e.printStackTrace();
                        }
                        try
                        {
                                if(bufw!=null)
                                        bufw.close();
                        }
                        catch(Exception e)
                        {
                                e.printStackTrace();
                        }
                       
                       
                }
       
       
                sop("文件复制成功");
               
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
       
}
今天上午刚写的,希望对你有帮助

点评

我就笑笑 不说话  发表于 2016-1-11 13:34
回复 使用道具 举报
各路大神真是太厉害了
回复 使用道具 举报
本帖最后由 tsldxszd 于 2016-1-12 03:03 编辑

  • import java.io.*;
  • import java.nio.channels.FileChannel;
  • import java.util.HashMap;
  • import java.util.Map.Entry;
  • import java.util.Scanner;
  • /**
  • * 复制 D:中所有的.java 文件并改其后缀名为.txt   黏贴到 桌面上,当然可以是任何地方,
  • * 、只是我懒得做这无聊 的事了。
  • *
  • * 这个代码实现了以下功能,
  • * 1:不是指定某个文件夹 ,其范围可以大到搜索整个C或D或E盘里的 所有.java文件,
  • * 2:而不是单纯的复制黏贴 某一个 .java文件。不限制拷贝的文件个数,测试中 拷贝
  • *  了27个 D盘某 文件 夹中的.java文件,
  • * 3:用FileChannel 传输 ,大大 提高 了传输 速度。27个文件秒速到桌面
  • * 4:使用map集合只用2个函数就完成了所有的基本功能
  • *
  • * 收获:1:学习了map的遍历,因为 习惯了foreach,所以很不适应 map
  • * 2:学到了FileChannel ,效率提升太明显了。
  • * 3:加强了对 IO 流的理解和学习,尤其是File类的提高,改名字这里卡了二个小时,拷贝到指定文件夹卡 了3个小时。。
  • * 4:再次复习了进入文件夹的代码。
  • *
  • *
  • * @author 姜淑一
  • *
  • */
  • public class TestCopy2
  • {
  •     public static void main(String[] args) throws IOException
  •     {
  • //        让用户自己输入需要拷贝的文件夹
  •         String s = forName();
  •         File file = new File(s);
  • //        为了省代码,我定义在main里输入输出流
  •         FileInputStream in = null;
  •         FileOutputStream out = null;
  • //        这里必须用map集合,一个装file.getPath,一个装file.getName,因为只有map集合 才能存放两个String参数
  • //        这是 为了改变.java成.txt的必要条件,也是输入输出流不给力的地方
  •          HashMap <String,String>map = new  HashMap<String, String>();
  • //        getfile方法是为了取出例如在D:盘中 所有 .java文件的绝对路径key和文件名value,存放 到map集合,为 copy方法做准备
  • //         里面还用递归的方法实现了排除文件夹找文件的方法
  •         getFile(file ,map);
  • //        找到需要的所有.java文件后,通过对 map的遍历,一一对应的把key(绝对路径)传给Input,
  • //        把修改后的value(文件名)传给output,由于效率上考虑,在这里选择了
  • //         java.nio.channels.FileChannel;用File对象.getChannel()获得传输通道
  •         copy(in,out,map);
  •         System.out.println("已经帮你把"+s+"中的所有.java文件改为.txt文件并拷贝到了桌面上");
  •     }
  •     public static String forName()
  •     {
  •         Scanner sc = new Scanner(System.in);
  •         System.out.println("请输入您想复制的文件夹(格式如D:\\\\或者D:\\\\xxx\\\\)");
  •         System.out.println("请注意,如果您输入的是c:\\或者D:\\,查找会比较慢");
  •         String line = sc.nextLine();
  •         sc.close();
  •         return line;
  •     }
  •     public static void copy (FileInputStream in,FileOutputStream out,HashMap<String,String>map)
  •             throws IOException
  •     {
  •         FileChannel o = null;
  •         FileChannel i = null;
  • //        这个遍历的方法是利用entry来做的
  •         for (Entry<String, String> entry : map.entrySet())
  •         {
  • //            定义输入输出 流,输入流就是.java的路径,输出 流就是通过文件名修改过后的.txt的路径
  •             in = new FileInputStream(entry.getKey());
  •             out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\"
  •             +entry.getValue().replace(".java", ".txt"));
  • //           获得out通道和in通道,对接传输
  •             o = out.getChannel();
  •             i=  in.getChannel();
  •             i.transferTo(0, i.size(), o);
  •         }
  •     }
  •     public static void getFile(File file,HashMap<String,String>map)
  •     {
  • //        递归去掉文件夹
  •         File[] list = file.listFiles();
  • //        递归和for循环 的联用,递归判断listp是否 文件夹,是文件夹,就继续进入。
  • //        for循环控制文件比较的 次数,也就是给map赋值
  •         if(list !=null)
  •         {
  •             for (int i = 0; i < list.length; i++)
  •             {
  •             if (list.isDirectory())
  •             {
  •                 getFile(list,map);
  •             }
  • //         只有结尾为.txt的文件 才添加路径和文件名到map集合中
  •             else
  •             {
  •                 if(list.getName().endsWith(".java"))
  •                 {
  •                     String key =list.getPath();
  •                     String value = list.getName();
  •                     map.put(key,value);
  •                 }
  •             }
  •         }
  •     }
  • }
  • }

点评

写了一天,基本实现了我想要的所有功能,注释也加了,方便各位点评  发表于 2016-1-12 02:48
回复 使用道具 举报
本帖最后由 lishihao88 于 2016-5-26 18:33 编辑
  1. package io;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.util.Scanner;

  7. public class IO_Test {

  8.     /**
  9.      * 在控制台输入一个文件夹路径,将这个文件夹下的所有 .java文件拷贝到另一个文件夹并修改名字为 .txt
  10.      * @throws IOException
  11.      */
  12.     public static void main(String[] args) throws IOException {
  13.         File to  = new File("D:\\TXT");                       //创建目的文件夹路径
  14.          if(!to.exists())  {                                    //判断目的文件是否存在,不存在就创建
  15.                   to.mkdirs();
  16.         }
  17.         File dir = getDir();                                       //获取返回的路径
  18.         File [] arr = dir.listFiles();                            //获取路径下所有文件
  19.         for (File f : arr) {                                         //遍历文件数组
  20.             if(f.getName().endsWith(".java")) {       //对每一个文件做判断是否是以.java结尾,是的话进入
  21.                 String s = f.getName().replace(".java", ".txt");         //对文件进行改名
  22.                 FileInputStream fis = new FileInputStream(f);        //创建输入流
  23.                 FileOutputStream fos = new FileOutputStream(new File(to,s));//创建输出流
  24.                 int b ;
  25.                 while((b = fis.read())!=-1) {                        //以下都是io流的核心代码
  26.                     
  27.                     fos.write(b);
  28.                 }
  29.                 fis.close();
  30.                 fos.close();
  31.             }
  32.         }
  33.         
  34.     }

  35.     public static File getDir() {
  36.         Scanner sc = new Scanner(System.in);                        //创建键盘录入对象
  37.         System.out.println("请输入一个文件夹路径");                //温馨提示一下
  38.         while(true) {                                                         //循环判断输入的路径是否合法
  39.         String s = sc.nextLine();                                      //用字符串s记录一下输入的路径
  40.         File dir = new File(s);                                          //创建File对象,传入s
  41.                                                         
  42.         if(dir.isFile()) {                                  //对输入的路径做出判断,是否是文件路径
  43.             System.out.println("您输入的是一个文件路径,请输入一个文件夹路径");
  44.         }else if(!dir.exists()){                                           //是否存在
  45.             System.out.println("您输入的文件夹路径不存在");
  46.         }else {                                                                   //返回一个正确的路径
  47.             return dir;
  48.         }
  49.     }
  50.     }
  51. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马