《java比较文件_读取输出文件_正则表达式匹配》由会员分享,可在线阅读,更多相关《java比较文件_读取输出文件_正则表达式匹配(5页珍藏版)》请在金锄头文库上搜索。
1、package com.lhs;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import jav
2、a.util.Iterator;import java.util.LinkedHashMap;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;/* 比较 2 个文件的内容,输出不一样的部分* * 涉及到的重要知识点有:* java 读取文件,输出文件* java 正则表达式匹配* * * 2 个文件内容是:中文 英文,然后分别比较中文部分和英文部分,文件内容如下:520 香烟 520cigarette678 月 678yueA-zone A-zoneA.O.史密斯 AOsmsA
3、CE 床垫 ACEAOL 时代华纳 Time WarnerBMG 唱片 Bertelsmann Music GrBRAPPERS BRAPPERSCosta 咖啡 Costa Coffee唐娜凯伦 Donna Karan New York* author lihsh* version 1.0*/public class FileCompare /*数据量比较少的那个文件 */ private Map fileLessMap = new LinkedHashMap();/*数据量比较多的那个文件 */private Map fileMoreMap = new LinkedHashMap();/*
4、比较结果:中文名和英文名都相同 */private Map sameKey_sameValueMap = new LinkedHashMap();/*比较结果:中文名相同,英文名不同 */private Map sameKeyMap = new LinkedHashMap();/*正则表达式匹配:中文 */private String regChinese = u4E00-u9FA5+;/*正则表达式匹配:英文 */private String regEnglish = a-zA-Z0-9+.*a-zA-Z*;public static void main(String args) FileC
5、ompare fileCompare = new FileCompare();fileCompare.start();/* 入口*/public void start()readFile(config/brand_c2e 按中文排序.txt, fileLessMap);readFile(config/all-pingpai-zh-en20131022.TXT, fileMoreMap);compare();write2file(sameKey_sameValueMap, config/sameKey_sameValue.txt);write2file(sameKeyMap, config/sa
6、meKey.txt/);/* 读取文件到 map 中* param file 文件路径* param fileMap 存储的 map*/private void readFile(String file, Map fileMap) BufferedReader br = null;String line = ;try br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(file), UTF-8);while(line = br.readLine() != null) parse(line, fil
7、eMap); catch (FileNotFoundException e) e.printStackTrace();catch (IOException e) e.printStackTrace();finally if(br != null) try br.close(); catch (IOException e) e.printStackTrace();/* 解析出一行中的中文和英文,并存储在 fileMap 参数中* param line 从文件中读取的行* param fileMap 存储的 map*/private void parse(String line, Map file
8、Map) String chinese = regParse(line, regChinese).toLowerCase();String english = regParse(line, regEnglish).toLowerCase();fileMap.put(chinese, english);/* 正则表达式匹配行* param line 从文件中读取的行* param reg 正则表达式* return 匹配的结果*/private String regParse(String line, String reg)Pattern pattern = Ppile(reg);Matcher
9、 matcher = pattern.matcher(line);String group = ;while(matcher.find() group = matcher.group();return group;return group;/* 比较 2 个 map,结果存放到另外的 map 中*/public void compare() for(Iterator it = fileLessMap.keySet().iterator(); it.hasNext();) String key = it.next();String value = fileLessMap.get(key);boo
10、lean containsKey = fileMoreMap.containsKey(key);boolean valueEqual = false;String value2 = fileMoreMap.get(key);if(containsKey) valueEqual = value2.equalsIgnoreCase(value);if(containsKey & valueEqual) System.out.println(找到一样的中文名和英文名: + key + : + value);sameKey_sameValueMap.put(key, value);else if(co
11、ntainsKey & !valueEqual) System.out.println(找到一样的中文名,但英文名不一样: + key + / + value + : + key + / + value2);sameKeyMap.put(key + / + value, key + / + value2);/* 把 map 中的结果输出到文件中* param map 待输出的 map* param file 输出文件全路径*/private void write2file(Map map, String file) BufferedWriter bw = null; try bw = new
12、BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(file), UTF-8);for(Iterator it = map.keySet().iterator(); it.hasNext();) String key = it.next();String value = map.get(key);bw.write(key + , + value);bw.newLine();bw.flush(); catch (FileNotFoundException e) e.printStackTrace();catch (IOException e) e.printStackTrace();finally if(bw != null) try bw.close(); catch (IOException e) e.printStackTrace();可以到这里下载全部代码和测试数据:http:/