in = new InputStreamReader(new FileInputStream("yourFilePath\\unicodeFile.txt"), "Unicode"); FilterUnicodeChar reader = new FilterUnicodeChar(in); int c; while((c = reader.read()) != -1){ System.out.print((char)c); } reader.close(); }} class FilterUnicodeChar extends FilterReader{ protected FilterUnicodeChar(Reader in) { super(in); } @Override public int read() throws IOException { int c = super.read(); return c == -1 ? c : filter((char)c); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int nLength = super.read(cbuf, off, len); int last = off + nLength; for(int i = off; i < last; i++){ cbuf[i] = filter(cbuf[i]); } return nLength; }
private char filter(char c){ char result = '\u0000'; switch (c) { case ' ' : case '\r': result = '\uFEFF'; break; case '[': result = '{'; break; case ']': result = '}'; break; case '\n': result = '\n'; break; default: result = c; break; }
[ ] ,改为{ }可以用字符串替换。
关键是想学习一下Unicode文件的读写是如何实现的,Unicode文件不同于ANSI文件,Unicode文件是双字节,文件头还有特殊标志。不是为了单纯解决上面提出的问题(用WORD或许就可解决),是想学习JAVA语言。
做个示例吧,先是不修改读取,后展示修改后的结果:先建个unicodeFile.txt文件 aaa你好
学习unicode文件读取
[注意这个括号是要替换的]注意保存为Unicode格式。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FilterReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;public class UnicodeFileReadDemo { public static void main(String[] args) throws IOException {
InputStreamReader in = new InputStreamReader(new FileInputStream("yourFilePath\\unicodeFile.txt"), "Unicode");
BufferedReader bufferedReader = new BufferedReader(in);
String str = bufferedReader.readLine();
while(str != null){
System.out.println(str);
str = bufferedReader.readLine();
}
bufferedReader.close();
System.out.println("----------------");
in = new InputStreamReader(new FileInputStream("yourFilePath\\unicodeFile.txt"), "Unicode");
FilterUnicodeChar reader = new FilterUnicodeChar(in);
int c;
while((c = reader.read()) != -1){
System.out.print((char)c);
}
reader.close();
}}
class FilterUnicodeChar extends FilterReader{ protected FilterUnicodeChar(Reader in) {
super(in);
} @Override
public int read() throws IOException {
int c = super.read();
return c == -1 ? c : filter((char)c);
} @Override
public int read(char[] cbuf, int off, int len) throws IOException {
int nLength = super.read(cbuf, off, len);
int last = off + nLength;
for(int i = off; i < last; i++){
cbuf[i] = filter(cbuf[i]);
}
return nLength;
}
private char filter(char c){
char result = '\u0000';
switch (c) {
case ' ' :
case '\r':
result = '\uFEFF';
break;
case '[':
result = '{';
break;
case ']':
result = '}';
break;
case '\n':
result = '\n';
break;
default:
result = c;
break;
}
return result;
}
}
运行结果: aaa你好
学习unicode文件读取
[注意这个括号是要替换的]
----------------
aaa你好
学习unicode文件读取
{注意这个括号是要替换的}
谢谢!我试一试。
不知Unicode文件如何写入?
out.write(" aaa你好 \r\n");
out.write(" 学习unicode文件读取 \r\n");
out.write("[注意这个括号是要替换的]");
out.close();