黑马程序员技术交流社区

标题: 分享: IO流常考题 [打印本页]

作者: Fate_stay    时间: 2016-9-29 22:46
标题: 分享: IO流常考题
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();
        }
}



作者: juanjuan    时间: 2016-10-1 00:06
谢谢,我正好在学习............................
作者: 梦想工程师    时间: 2016-10-1 00:58
感觉复制的什么事最难的
作者: 一半的留言    时间: 2016-10-1 02:01
我觉得点招题不可怕,最可怕的是面试
作者: 李春林    时间: 2016-10-1 04:06
谢谢楼主的分享

作者: wangkai426    时间: 2016-10-1 16:10
这题常考吗?
作者: xianghui0521    时间: 2016-10-3 10:31
改名字 就是截取 后面 .java  然后再替换.txt 么?
作者: 小沧月    时间: 2016-10-3 10:48
66666666666
作者: 小泥人    时间: 2016-10-3 11:34
学习了,感谢
作者: huangweicong    时间: 2016-10-3 11:51
谢谢!!!!!!
作者: babysa    时间: 2016-10-3 12:31
IO这段真搞不懂
作者: 逍遥荻花    时间: 2016-10-3 14:33
可以直接替换不用截取吧 直接.txt替换.java




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2