java面试题之使用IO字符流操作文本文件

来源:互联网 发布:西门子840d编程手册 编辑:程序博客网 时间:2024/06/01 08:58

1.将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换

    /**     * 将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换     * 使用高效字符流按行读取,然后放入集合中,倒着遍历集合,将读取的内容输出到文本中     */    @Test    public void reversalFile(){        BufferedReader reader = null;        BufferedWriter writer = null;        try {            String sourceFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\a.txt";            String targetFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\b.txt";            reader = new BufferedReader(new FileReader(sourceFileUrl));            writer = new BufferedWriter(new FileWriter(targetFileUrl));            ArrayList<String> list = new ArrayList<>();            String line;            while ((line=reader.readLine())!=null){                list.add(line);            }            //反向遍历集合,输出内容            for (int i=list.size()-1; i>=0;i--){                writer.write(list.get(i));                writer.newLine();            }        }catch (Exception e){            e.printStackTrace();        }finally {            //在finally中关闭开启的流            if (reader!=null){                try {                    reader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if (writer!=null){                try {                    writer.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

2.获取一个文本上每个字符出现的次数,将结果写在b.txt上

    /**     * 获取一个文本上每个字符出现的次数,将结果写在b.txt上     */    @Test    public void statCharCountInFile(){        BufferedReader reader = null;        BufferedWriter writer = null;        try {            String sourceFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\a.txt";            String targetFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\b.txt";            reader = new BufferedReader(new FileReader(sourceFileUrl));            writer = new BufferedWriter(new FileWriter(targetFileUrl));            Map<Character,Integer> map = new TreeMap<>();            int c;            while ((c=reader.read())!=-1){                //将读取到的内容强转为char类型,判断map集合中是否已存在,存在,value+1,不存在,value初始化为1                char key = (char) c;                map.put(key, map.containsKey(key) ? map.get(key) + 1 : 1);            }            //遍历集合,将结果写入b.txt中,注入特殊字符转换            for (Character key : map.keySet()) {                switch (key){                    case '\t':                        writer.write("\\t出现了:"+map.get(key)+"次");                        break;                    case '\r':                        writer.write("\\r出现了:"+map.get(key)+"次");                        break;                    case '\n':                        writer.write("\\n出现了:"+map.get(key)+"次");                        break;                    default:                        writer.write(key+"出现了:"+map.get(key)+"次");                }                writer.newLine();            }        }catch (Exception e){            e.printStackTrace();        }finally {            //在finally中关闭开启的流            if (reader!=null){                try {                    reader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if (writer!=null){                try {                    writer.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }










原创粉丝点击