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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Fate_stay 中级黑马   /  2016-9-29 22:46  /  1711 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

/**
题目:
        编写一个程序,将指定目录下所有.java文件拷贝到另一个目录中,
        并将扩展名改为.txt       
思路:
        1、用File对象封装目录
        2、通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
        3、遍历这个File数组,得到每一个File对象
        4、判断该File对象是否是文件
                a、如果是文件
                b、继续判断是否以.java结尾
                        是:先改名后复制文件
                        否:不复制
                       
        总结: 先复制, 后改名
*/
public class Prictice2 {
        public static void main(String[] args) throws IOException {
                File file = new File("D:\\new_test");
                // 调用方法,遍历文件或文件夹,将所有.java后缀的改为.txt,随后复制给E盘Test文件夹中
                lookFiles(file);
                System.out.println("先复制.java文件,随后写入文件夹Test时,将文件后缀写为: .txt, 完毕");
        }

        private static void lookFiles(File file) throws IOException {
                // 使用listFiles()遍历文件
                File[] files = file.listFiles();
                for (File f : files) {
                        if(f.isFile()) {
                                if(f.getName().endsWith(".java")) {
                                        // 取得它的小数点的角标
                                        int index = f.getAbsolutePath().lastIndexOf(".");
                                        // 利用角标,截取字符串
                                        String str = f.getAbsolutePath().substring(index);
                                        // 将.java后缀 替换成 .txt
                                        String newFileName = f.getName().replace(str, ".txt");
                                       
                                        // renameTo(File f)方法怎么用? 答: 里面传文件
                                        // 调用拷贝方法
                                        copyFiles(f, newFileName);
                                }
                        } else {
                                // 递归调用方法,是文件夹的话继续遍历
                                lookFiles(f);
                        }
                }
        }
        // 复制文件方法
        private static void copyFiles(File file, String newFileName) throws IOException {
                File newFile = new File("E:\\Test", newFileName);

                // 1.创建流
                BufferedReader br = new BufferedReader(new FileReader(file));
                BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
                // 2.写入数据
                // a.声明有效长度
                int len;
                // b.声明字符数组
                char[] ch_arr = new char[1024];
                while((len = br.read(ch_arr)) != -1) {
                        // 写入数据
                        bw.write(ch_arr, 0, len);
                       
                }
                // 3.关闭资源
                bw.close();
                br.close();
        }
}


11 个回复

正序浏览
可以直接替换不用截取吧 直接.txt替换.java
回复 使用道具 举报
IO这段真搞不懂
回复 使用道具 举报
谢谢!!!!!!
回复 使用道具 举报
学习了,感谢
回复 使用道具 举报
66666666666
回复 使用道具 举报
改名字 就是截取 后面 .java  然后再替换.txt 么?
回复 使用道具 举报
这题常考吗?
回复 使用道具 举报
回复 使用道具 举报
我觉得点招题不可怕,最可怕的是面试
回复 使用道具 举报
感觉复制的什么事最难的
回复 使用道具 举报
谢谢,我正好在学习............................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马