让我来回答你这个问题吧,你应该查下字符集 ,比如:取出第一个字符,'1' ,这个字符用十进制int型表示是:49 ,即电脑用49这个数来表示'1'。
再说 file.write(n+100); 这里用的是:write(int ch)方法。即file.write(49+100) ; 十进制数149 在字符集(utf-8)中并未代表某个字符,(128-160都为空) 因此输出乱码或空值,原因就在这了。
你可以打开123文件,看下里面内容应该都是?号或者乱码或者空值。读取出来当然也会是空值或乱码
所以加100是不对的,加1试试,应该就不会出现问题了
你这个printf起什么作用?
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
public class ReadFromFile {
public static void readFileByChars(String fileName) {
File file = new File(fileName);
Reader reader = null;
Writer writer=null;
try {
writer = new OutputStreamWriter(new FileOutputStream(file));
String name = "123456789";
char [] ch = name.toCharArray();
int i;
char n;
for(i=0;i
n = ch[i];
writer.write(n);
}
writer.close();
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1) {
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ReadFromFile rf=new ReadFromFile();
rf.readFileByChars("C:\\123.txt");
}
}
//这样写就没错误了 你试试吧