From 304895ce6242327f04dd3b96e7f6d99cd5fdd191 Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Wed, 19 Sep 2001 12:10:25 +0000 Subject: [PATCH] Add encoding to task so that replace can work on double byte characters git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269721 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/CoreTasks/replace.html | 5 ++++ .../apache/tools/ant/taskdefs/Replace.java | 25 ++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/docs/manual/CoreTasks/replace.html b/docs/manual/CoreTasks/replace.html index 6191f238b..80d092ed3 100644 --- a/docs/manual/CoreTasks/replace.html +++ b/docs/manual/CoreTasks/replace.html @@ -30,6 +30,11 @@ must use a nested <replacetoken> element.

The base directory to use when replacing a token in multiple files. + + encoding + The encoding of the files upon which replace operates. + No - defaults to default JVM encoding + token the token which must be replaced. diff --git a/src/main/org/apache/tools/ant/taskdefs/Replace.java b/src/main/org/apache/tools/ant/taskdefs/Replace.java index ba049f2d9..f3bb45d56 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Replace.java +++ b/src/main/org/apache/tools/ant/taskdefs/Replace.java @@ -83,6 +83,9 @@ public class Replace extends MatchingTask { private int replaceCount; private boolean summary = false; + /** The encoding used to read and write files - if null, uses default */ + private String encoding = null; + //Inner class public class NestedString { @@ -291,8 +294,13 @@ public class Replace extends MatchingTask { } try { - BufferedReader br = new BufferedReader(new FileReader(src)); - BufferedWriter bw = new BufferedWriter(new FileWriter(temp)); + Reader fileReader = encoding == null ? new FileReader(src) + : new InputStreamReader(new FileInputStream(src), encoding); + Writer fileWriter = encoding == null ? new FileWriter(src) + : new OutputStreamWriter(new FileOutputStream(src), encoding); + + BufferedReader br = new BufferedReader(fileReader); + BufferedWriter bw = new BufferedWriter(fileWriter); // read the entire file into a StringBuffer // size of work buffer may be bigger than needed @@ -354,8 +362,8 @@ public class Replace extends MatchingTask { temp.delete(); } } catch (IOException ioe) { - ioe.printStackTrace(); - throw new BuildException(ioe, location); + throw new BuildException("IOException in " + src + " - " + + ioe.getClass().getName() + ":" + ioe.getMessage(), ioe, location); } } @@ -412,6 +420,15 @@ public class Replace extends MatchingTask { createReplaceValue().addText(value); } + /** + * Set the file encoding to use on the files read and written by replace + * + * @param encoding the encoding to use on the files + */ + public void setEncoding(String encoding) { + this.encoding = encoding; + } + /** * Nested element. */