1 5 package com.tc.util; 6 7 import java.io.BufferedOutputStream ; 8 import java.io.BufferedReader ; 9 import java.io.File ; 10 import java.io.FileInputStream ; 11 import java.io.FileNotFoundException ; 12 import java.io.FileOutputStream ; 13 import java.io.IOException ; 14 import java.io.InputStreamReader ; 15 import java.util.Arrays ; 16 import java.util.Comparator ; 17 import java.util.regex.Matcher ; 18 import java.util.regex.Pattern ; 19 20 public final class ReplaceLine { 21 22 private ReplaceLine() { 23 } 25 26 31 public static void parseFile(ReplaceLine.Token[] tokens, File file) throws FileNotFoundException , IOException { 32 Arrays.sort(tokens, new Comparator () { 33 public int compare(Object o1, Object o2) { 34 return new Integer (((Token) o1).lineNumber).compareTo(new Integer (((Token) o2).lineNumber)); 35 } 36 }); 37 int tokenIndex = 0, lineIndex = 0; 38 StringBuffer text = new StringBuffer (); 39 BufferedReader reader = new BufferedReader (new InputStreamReader (new FileInputStream (file))); 40 String line; 41 while ((line = reader.readLine()) != null) { 42 if (tokenIndex < tokens.length && ++lineIndex == tokens[tokenIndex].lineNumber) { 43 line = replaceToken(tokens[tokenIndex].replacePattern, line, tokens[tokenIndex].value); 44 tokenIndex++; 45 } 46 text.append(line + "\n"); 47 } 48 reader.close(); 49 BufferedOutputStream out = new BufferedOutputStream (new FileOutputStream (file)); 50 out.write(text.toString().getBytes()); 51 out.flush(); 52 out.close(); 53 } 54 55 private static String replaceToken(String expression, String text, String value) { 56 Pattern pattern = Pattern.compile(expression); 57 Matcher matcher = pattern.matcher(text); 58 while (matcher.find()) { 59 return matcher.replaceAll(value); 60 } 61 return text; 62 } 63 64 public static class Token { 65 private final int lineNumber; 66 private final String replacePattern; 67 private final String value; 68 69 public Token(int lineNumber, String replacePattern, String value) { 70 this.lineNumber = lineNumber; 71 this.replacePattern = replacePattern; 72 this.value = value; 73 } 74 } 75 } 76 | Popular Tags |