通过 Java 程序而不是整数将意外字符写入文本文件
Getting unexpected characters written into a text file by a Java Program instead of an integer
我有一个用于两遍汇编程序的 Java 程序,我目前正在为它做两遍汇编程序,在此期间我需要将一个 Integer 写入一个文件,但是一些意想不到的字符被写入文件,我向你保证我要写的值绝对是一个整数,见下文
Symbol Address : 231
Symbol Address : 237
Symbol Address : 237
Symbol Address : 236
Symbol Address : 210
Symbol Address : 210
Symbol Address : 236
Symbol Address : 236
Symbol Address
: number
, 这个 number
是我想通过下面的代码写入文件的内容,
public String PassTwo() throws Exception{
String source_inter_file = "pass_one_output.txt";
String object_file = "object_code.txt";
FileReader file_rd = new FileReader(source_inter_file);
BufferedReader buf_read = new BufferedReader(file_rd);
FileWriter file_wrte = new FileWriter(object_file);
BufferedWriter buf_wrte = new BufferedWriter(file_wrte);
String CurrSourceLine = "";
if(file_rd==null) return "Error : Passone output file not found";
while((CurrSourceLine=buf_read.readLine())!=null){
String token[] = CurrSourceLine.split("[ \t]+");
if(token[0].length()==0){
for(int i =0;i<3;i++){
file_wrte.write(" - ");
}
file_wrte.write('\n');
}else{
file_wrte.write(token[0]+" ");
file_wrte.write(token[2]+" ");
if(token.length==6 && token[4].equals("S")){
System.out.println("Symbol Address : "+Symboltable[Integer.parseInt(token[5])].address);
file_wrte.write(Symboltable[Integer.parseInt(token[5])].address); // Error must be here
}
file_wrte.write('\n');
}
}
file_wrte.close();
file_rd.close();
buf_read.close();
return "Object code succesfully genrated";
}
写入文件的字符是ç、í、Ò,而不是符号地址。我在这里做错了什么。
- - -
200 1 ç
201 3 í
202 7 í
203 8
204 7
205 5
206 5
207 5 ì
208 4
209 6 Ò
210 10 Ò
210 10 ì
231 0
234 5
235 1 ì
236 1
237 0
239 2
如果您使用 file_wrte.write(97);
,它会将实际数字写入文件。当您在文本编辑器中打开文件时,97 是字符 'a'.
的 ACII 值
如果您想将 97 作为字符串写入文件,请使用 file_wrte.write(String.valueOf(97));
这会将 57 55 写入文件,在 ASCII 中表示 97
字符串。
尝试:
file_wrte.write(String.valueOf(Symboltable[Integer.parseInt(token[5])].address));
你已经在这里做了类似的事情file_wrte.write(token[0]+" ");
这里运算符 +
被重载了。
编译器将 String + object
翻译成 string.concat(object.toString())
。
我有一个用于两遍汇编程序的 Java 程序,我目前正在为它做两遍汇编程序,在此期间我需要将一个 Integer 写入一个文件,但是一些意想不到的字符被写入文件,我向你保证我要写的值绝对是一个整数,见下文
Symbol Address : 231
Symbol Address : 237
Symbol Address : 237
Symbol Address : 236
Symbol Address : 210
Symbol Address : 210
Symbol Address : 236
Symbol Address : 236
Symbol Address
: number
, 这个 number
是我想通过下面的代码写入文件的内容,
public String PassTwo() throws Exception{
String source_inter_file = "pass_one_output.txt";
String object_file = "object_code.txt";
FileReader file_rd = new FileReader(source_inter_file);
BufferedReader buf_read = new BufferedReader(file_rd);
FileWriter file_wrte = new FileWriter(object_file);
BufferedWriter buf_wrte = new BufferedWriter(file_wrte);
String CurrSourceLine = "";
if(file_rd==null) return "Error : Passone output file not found";
while((CurrSourceLine=buf_read.readLine())!=null){
String token[] = CurrSourceLine.split("[ \t]+");
if(token[0].length()==0){
for(int i =0;i<3;i++){
file_wrte.write(" - ");
}
file_wrte.write('\n');
}else{
file_wrte.write(token[0]+" ");
file_wrte.write(token[2]+" ");
if(token.length==6 && token[4].equals("S")){
System.out.println("Symbol Address : "+Symboltable[Integer.parseInt(token[5])].address);
file_wrte.write(Symboltable[Integer.parseInt(token[5])].address); // Error must be here
}
file_wrte.write('\n');
}
}
file_wrte.close();
file_rd.close();
buf_read.close();
return "Object code succesfully genrated";
}
写入文件的字符是ç、í、Ò,而不是符号地址。我在这里做错了什么。
- - -
200 1 ç
201 3 í
202 7 í
203 8
204 7
205 5
206 5
207 5 ì
208 4
209 6 Ò
210 10 Ò
210 10 ì
231 0
234 5
235 1 ì
236 1
237 0
239 2
如果您使用 file_wrte.write(97);
,它会将实际数字写入文件。当您在文本编辑器中打开文件时,97 是字符 'a'.
如果您想将 97 作为字符串写入文件,请使用 file_wrte.write(String.valueOf(97));
这会将 57 55 写入文件,在 ASCII 中表示 97
字符串。
尝试:
file_wrte.write(String.valueOf(Symboltable[Integer.parseInt(token[5])].address));
你已经在这里做了类似的事情file_wrte.write(token[0]+" ");
这里运算符 +
被重载了。
编译器将 String + object
翻译成 string.concat(object.toString())
。