这道题我自己也研究过,贴上我的代码,你可以参考一下
- package reviewCode2;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.TreeMap;
- /**
- * 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出
- *@author
- */
- public class IOTest {
- public static void main(String[] args) throws IOException {
- File socfile = new File("G:\\BaiduYunDownload\\JavaEE\\MyWork\\reviewCode\\src\\reviewCode");
- File destfile = new File("G:\\BaiduYunDownload\\JavaEE\\MyWork\\reviewCode\\src\\reviewCode2\\my.txt");
- Myread(socfile,destfile);
- }
- public static void Myread(File socfile,File destfile) {
- List<File> list = new ArrayList<File>();
-
- if(!socfile.exists()){
- throw new RuntimeException("非法路径");
- }else if(!socfile.isDirectory()){
- throw new RuntimeException("非法目录");
- }
-
- //获取目标目录集合
- findFile(socfile,list);
-
- FileReader fr = null;
- FileWriter fw = null;
-
- //将每一个字符放到map集合
- Map map = new TreeMap();
- try {
- //将目录下的所有文件复制到同一个txt文件下
- for (Iterator<File> it = list.iterator(); it.hasNext();) {
- File file = it.next();
- fr = new FileReader(file);
- fw = new FileWriter(destfile,true);
- int ch = 0;
- while ((ch = fr.read()) != -1) {
-
- if(map.get((char)ch)==null){
- map.put((char)ch,1);
- }else{
- int i = (int)map.get((char)ch);
- map.put((char)ch,++i);
- }
-
- fw.write(ch);
- fw.flush();
- }
- }
-
- //统计字符出现的次数
- Set<Map.Entry<?,?>> set = map.entrySet();
- for(Map.Entry<?,?> me:set){
- System.out.println(me.getKey()+":"+me.getValue()+"次");
- }
-
- } catch (Exception e) {
- System.out.println("复制文件发生错误");
- }finally{
- if(fr!=null){
- try {
- fr.close();
- } catch (IOException e) {
- throw new RuntimeException("关闭资源异常");
- }
-
- }
- if(fw!=null){
- try {
- fw.close();
- } catch (IOException e) {
- throw new RuntimeException("关闭资源异常");
- }
- }
- }
-
- }
-
- //查找目录下的所有文件
- public static void findFile(File socfile,List<File> list) {
- File[] files = socfile.listFiles();
- for(File f:files){
- if(f.isDirectory()){
- findFile(f,list);
- }else{
- list.add(f);
- }
- }
- }
- }
复制代码 |