Day20 IO字节流

1.有这样的一个words数组,数组中每个字符串的格式为“词性:单词” String[] words = {“verb:eat”,“verb:drink”,“verb:sleep”,“verb:play”,“noun:rice”,“noun:meat”,“noun:hand”,“noun:hair”}; 根据单词性质动词verb全部存入verb.txt文件中 根据单词性质名词noun全部存入noun.txt文件中.

import java.io.*;

public class day1901 {
    public static void main(String[] args) {
        //创建数组对象
        String[] words = {"verb:eat", "verb:drink", "verb:sleep", "verb:play",
                "noun:rice", "noun:meat", "noun:hand", "noun:hair"};
        //创建字符串用于将动词名词分开
        String verb = "verb";
        String noun = "noun";
        //将所有的动词和名词分别拼接到verbs和nouns两个字符串中,然后将字符串分别写入两个txt文件中
        String verbs = "";
        String nouns = "";
        for (String word : words) {
            //这个格式是foreach的形式,表示取出数组v中的每一个元素,
            // 就是循环一次就依次取出一个元素赋值给s,直到取完为止.
            if (word.contains(verb)) {
                //包含verb则存入字符串verbs换行
                verbs += word;
                verbs += "/n";
            }
            if (word.contains(noun)) {
                //包含noum则存入字符串nouns换行
                nouns += word;
                nouns += "/n";
            }
        }
        //在指定目录创建存入动名词的txt
        File verbFile = new File("d://zuoye//verb.txt");
        File nounFile = new File("d:\\zuoye\\noun.txt");
        //创建字节输出流对象
        FileOutputStream verbFileOutStream = null;
        FileOutputStream nounFileOutStream = null;
        try {
            //初始化输出流
            verbFileOutStream = new FileOutputStream(verbFile);
            nounFileOutStream = new FileOutputStream(nounFile);
            //创建字节数组(字符串->字符数组)
            byte[] verbBytes = verbs.getBytes();
            byte[] nounBytes = nouns.getBytes();
            //输出
            verbFileOutStream.write(verbBytes);
            nounFileOutStream.write(nounBytes);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            try {
                verbFileOutStream.close();
                nounFileOutStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

思路:(参考答案)采用的基础过程,有点繁琐.
针对该题可以采用匹配前4位字符串,将动词和名词区分出来(利用equals),然后利用verb.write(words[i].getBytes(),Offset,len);输出剩余字符串.

2. 递归查找指定目录中(包括子目录中),所有的.java文件, 并且,把所有这些找到的java文件,复制到一个指定的目录下, 目录结构同Day19,递归删除那道题的firstLevel(目录手动创建即可,不用使用代码创建)

import java.io.*;

public class day2002 {
    public static void main(String[] args) {
        //初始化创建目录
        FileHandler fileHandler = null;
        try {
            //创建要查找的目录
            File dir = new File("d:\\firstLevel");
            //利用fileHandler对象,完成递归查找,并将查找结果,存到d:\result目录中
            fileHandler = new FileHandler("d:\\result");

            //由FileFilter接口的匿名内部类对象,指明目标文件的筛选条件(new FileFilter()),开始递归
            fileHandler.findFile(dir, new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    //查找以.java结尾的文件
                    return pathname != null
                            && pathname.isFile()
                            && pathname.getName().endsWith(".java");
                }
            });

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 利用该类,完成文件的递归查找功能
class FileHandler {
    //创建保存java文件的目录路径
    File dir;

    public FileHandler(String recordPath) throws FileNotFoundException {
        //利用目标文件的路径字符串,初始化,表示用来存储文件名的文件的File对象
        dir = new File(recordPath);
        //确保目标目录存在,不存在则创建
        dir.mkdirs();
    }

    // 利用该方法,使用由FileFilter对象,所指明的筛选条件,筛选出符合条件的文件保存到指定文件中
    public void findFile(File file, FileFilter filter) throws IOException {
        //目录高级获取功能,返回一个File数组
        File[] files = file.listFiles();
        //递归+筛选功能
        if (files == null) {
            //说明当前File dir其实表示的是一个文件
            if (filter.accept(file)) {
                //满足筛选条件,就将满足条件的文件复制到目标目录下

                //创建File对象,表示复制的目标文件
                File destFile = new File(dir, file.getName());
                // 自己定义cooy方法,复制满足条件的文件到目标目录
                copyFile(file, destFile);
            }
            return;
        }
        //不为文件,则为目录,重复筛选(递归)
        for (int i = 0; i < files.length; i++) {
            findFile(files[i], filter);
        }
    }

    //copyFile方法,利用缓冲流完成文件的复制
    public void copyFile(File srcFile, File destFile) {
        // 创建缓冲输入/输出字节流对象
        InputStream in = null;
        OutputStream out = null;
        //初始化字节流对象,利用buffered包装流,提高效率
        try {
            in = new BufferedInputStream(
                    new FileInputStream(srcFile));

            out = new BufferedOutputStream(
                    new FileOutputStream(destFile));
            //复制文件
            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            try {
                in.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

思路:定义一个类,完成递归查找方法.
在类中定义findFile方法利用FileFilter功能筛选出想要的文件,其中利用listFile功能把所有的文件以数组的形式存储,利用for循环完成筛选的递归功能;
定义copyFile方法,复制筛选好的文件;
最后释放资源.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值