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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心弦上的景致 中级黑马   /  2013-4-8 23:37  /  2278 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈丽莉 于 2013-4-9 15:01 编辑

对任意盘符下的指定格式文件进行批量修改扩展名
我只记得需要用到集合  递归
但是具体实现细节我已经记不清楚了  请结合代码给小弟指点一下

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

12 个回复

正序浏览
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;

public class CopyFolder {
        public static void main(String[] args) throws IOException {
                // 封装目录
                File src = new File("d:\\java");
               
                //判断源文件夹是否存在
                if(!src.exists()){
                        throw new RuntimeException("源文件夹不存在");
                }
               
                //获取该目录下所有File对象数组
                File[] fileArray = src.listFiles(new FilenameFilter() {
                        @Override
                        public boolean accept(File dir, String name) {
                                return new File(dir,name).isFile() && name.endsWith(".java");
                        }
                });
               
                //封装目标文件夹
                File target = new File("d:\\jad");
                if(!target.exists()){
                        target.mkdir(); //创建一个目录
                }
               
                //遍历这个数组
                for(File file : fileArray){
                        String oldName = file.getName(); //d:\\java\\Demo.java
                        String newName = oldName.replace(".java", ".jad"); //Demo.jad
                        
                        File newFile = new File(target,newName);//新的文件路径//d:\\jad\\Demo.jad
                        
                        //实现文件的复制
                        BufferedReader br = new BufferedReader(new FileReader(file));
                        BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
                        
                        String line = null;
                        while((line=br.readLine())!=null){
                                bw.write(line);
                                bw.newLine();
                                bw.flush();
                        }
                        
                        bw.close();
                        br.close();
                }
        }
}

希望对你有帮助,参考毕老师的代码。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;

/*
* 需求:
*                 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad
*
* 分析:
*                 A:封装目录. d:\\java目录给封装
*                 B:获取该目录下所有File对象数组
*                 C:遍历这个数组,获取每一个File对象
*                         判断是否是否文件:
*                                 是:
*                                         判断是否以.java结尾
*                                                 是:复制到d:\\jad目录下。
*                                                 不是:什么都不做。
*                                 不是:什么都不做。
*
*                 D:改名有两种方案:
*                         Demo.java
*                         在遍历的时候,我就能够获取到名称
*                         Demo.java -- Demo.jad
*                         然后我在把d:\\java\\Demo.java -- d:\\jad\\Demo.jad
*
*                         先把所有的满足条件的文件复制过去,在统一改名。
*/
public class CopyFolder {
        public static void main(String[] args) throws IOException {
                // 封装目录
                File src = new File("d:\\java");
               
                //判断源文件夹是否存在
                if(!src.exists()){
                        throw new RuntimeException("源文件夹不存在");
                }
               
                //获取该目录下所有File对象数组
                File[] fileArray = src.listFiles(new FilenameFilter() {
                        @Override
                        public boolean accept(File dir, String name) {
                                return new File(dir,name).isFile() && name.endsWith(".java");
                        }
                });
               
                //封装目标文件夹
                File target = new File("d:\\jad");
                if(!target.exists()){
                        target.mkdir(); //创建一个目录
                }
               
                //遍历这个数组
                for(File file : fileArray){
                        String oldName = file.getName(); //d:\\java\\Demo.java
                        String newName = oldName.replace(".java", ".jad"); //Demo.jad
                       
                        File newFile = new File(target,newName);//新的文件路径//d:\\jad\\Demo.jad
                       
                        //实现文件的复制
                        BufferedReader br = new BufferedReader(new FileReader(file));
                        BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
                       
                        String line = null;
                        while((line=br.readLine())!=null){
                                bw.write(line);
                                bw.newLine();
                                bw.flush();
                        }
                       
                        bw.close();
                        br.close();
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
写了个代码;
思路:
1:装载所有文件夹下的文件至集合(递归)
2:遍历内存集合中的文件,修改文件名

贴代码;
  1. import java.io.File;
  2. import java.util.ArrayList;
  3. import java.util.List;


  4. public class FileRename {
  5.         static final public String txt = "txt";
  6.         static final public String path = "F:\\TextView";
  7.        
  8.         public static void main(String[] args) {
  9.                
  10.                 List<File> files = getFiles(null , path);
  11.                 System.out.println("该文件夹拥有文件数:"+files.size());
  12.                
  13.                 //更改文件名业务逻辑方法
  14.                 for(File f : files){
  15.                         System.out.println("=================================");
  16.                         System.out.println("更改前:"+f.getAbsolutePath());
  17.                         System.out.println("更改后:"+reNameFiles(f , txt));
  18.                 }
  19.                 System.out.println("=================================");
  20.                 System.out.println("恭喜您,您已经完全更改路径。");
  21.                
  22.         }
  23.        
  24.         /** 更改单个文件 */
  25.         public static String reNameFiles(File f , String txt) {
  26.                 String name = f.getAbsolutePath();
  27.                 int index = name.lastIndexOf(".");
  28.                 File newF = null;
  29.                 if(index != -1){
  30.                         name = name.substring(0, index+1);
  31.                         newF= new File(name+txt);
  32.                         f.renameTo(newF);
  33.                 }
  34.                 else{
  35.                         newF = new File(f.getAbsoluteFile() ,"."+txt);
  36.                         f.renameTo(newF);
  37.                 }
  38.                 return newF.getAbsolutePath();
  39.         }
  40.         /**
  41.          * 获取文件夹下所有文件
  42.          * @return
  43.          */
  44.         public static List<File> getFiles(List<File> list , String dirPath){
  45.                 if(list == null) list = new ArrayList<File>();
  46.                 File dir = new File(dirPath);
  47.                 if(dir.isDirectory()){
  48.                         File[] childrenFiles = dir.listFiles();
  49.                         for(File childrenFile : childrenFiles){
  50.                                 getFiles(list, childrenFile.getAbsolutePath());
  51.                         }
  52.                 }
  53.                 else{
  54.                         list.add(dir);
  55.                 }
  56.                 return list;
  57.                
  58.         }
  59.        
  60.        
  61. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
file.renameTo(new File(file.getParent(),file.getName().replaceAll("\\.txt$", ".jad")));

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
谢波 中级黑马 2013-4-10 14:41:30
9#
心弦上的景致 发表于 2013-4-10 14:32
我是想获取指定盘符下指定格式的文件 然后把文件批量修改成指定的格式
比如txt修改成jad ...

完全可以啊
获取txt文件名,然后修改下后缀,直接renameTo不就可以了吗
将路径做为参数传进去,做个界面的话 更好

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
谢波 发表于 2013-4-10 14:25
巧了,我正好写过这么一个小程序
其实很简单,用File类的renameTo方法就ok了
可以批量修改任 ...

我是想获取指定盘符下指定格式的文件 然后把文件批量修改成指定的格式
比如txt修改成jad
回复 使用道具 举报
谢波 中级黑马 2013-4-10 14:25:02
7#
{:soso_e113:}巧了,我正好写过这么一个小程序
其实很简单,用File类的renameTo方法就ok了
可以批量修改任何你想修改的字符
回复 使用道具 举报
可见 发表于 2013-4-9 14:58
这都行?

从前有一直吃胡萝卜的大灰狼。。。。
回复 使用道具 举报
这都行?
回复 使用道具 举报
陈丽莉 发表于 2013-4-9 00:11
这是标题党?  是我改还是你改咧?

玩论坛 我也就会一个发帖和回复  好尴尬,
回复 使用道具 举报
这是标题党?  是我改还是你改咧?   
回复 使用道具 举报
帖名起的霸气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马