/** * 第二题 * 解析文件。文件内容可能包含英文字母、数字、汉字等,统计文件中各个数字和英文字母各自的数量,区分大小写 * 并将Map中的结果写入目标文件中 * @param filePath 源文件路径 * @param destPath 目标文件路径 * @return 是否统计并写入成功 */ public boolean parse(String filePath, String destPath) { File f = new File(filePath); if (!f.exists() || !f.isFile()) // 文件不存在或不是文件,直接返回false { return false; } BufferedReader reader = null; BufferedWriter writer = null; try { reader = new BufferedReader(new FileReader(filePath)); // 按行读取文件 String line = null; Map map = new HashMap(); String s = null; //Map的key Integer numInt = null; //Map的value int num = 0; while ((line = reader.readLine()) != null) { line = line.trim(); for (int i = 0; i < line.length(); i++) { s = String.valueOf(line.charAt(i)); //指定字符 numInt = (Integer)map.get(s); //得到指定字符的value值 if (numInt == null) { map.put(s, Integer.valueOf(1)); } else { num = numInt.intValue(); map.put(s, Integer.valueOf(num + 1));//把指定的value放到指定的字符key下 } } } // 执行写入文件 writer = new BufferedWriter(new FileWriter(destPath)); String[] keys = (String[])map.keySet().toArray(new String[map.size()]); //把Map集合中的 键 放到String数组中 for (int i = 0; i < keys.length; i++) { writer.write(keys[i] + " 的字符有 " + map.get(keys[i])+" 个 "); writer.write("/r/n"); } writer.flush(); writer.close(); reader.close(); } catch (FileNotFoundException e) { return false; } catch (IOException e) { return false; } return true; } //将结果写进result.txt中 private void writeToTxt(StringBuffer sb, String destPath) { File file = new File(destPath); try { FileOutputStream outputStream = new FileOutputStream(file); outputStream.write(sb.toString().getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }