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.
*/