在完成JavaWeb作业时遇到一题是需要持久化保存登录人数的,题主当时就在Listener里写了输入输出两个函数,但是检查一看发现写入的数字变成了乱码(其实不能说是乱码)。
当时很疑惑就改用了如下代码:
写代码:
File file = new File(PATH);
if(file.exists()==false)
{
file.createNewFile();
}
//设置编码
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file,false),"UTF-8");
BufferedWriter writer = new BufferedWriter(out);
writer.write(5);
writer.close();
读代码:
File file = new File(PATH);
if(file.exists()==false)
{
file.createNewFile();
}
//设置编码
InputStreamReader in = new InputStreamReader(new FileInputStream(file), "UTF-8");
BufferedReader reader = new BufferedReader(in);
String msg = reader.readLine();
if(msg!=null)
{
if((msg.equals("")==false)||isNumeric(msg)==true)
{
count = Integer.valueOf(msg);
}
}
reader.close();
然并卵,还是不显示数字。
好吧,最后终于发现真相了:
其实outsteam.write()里面是一个单独的数字时,是把数字转换为ASCII码传进去的,所以也并不是什么乱码。
write()API如下:
Writes a single character.
Parameters:
c int specifying a character to be written//关键
Throws:
IOException - If an I/O error occurs
解决方法也很简单只需要在数字后面加上 +“” 就好,write就转换为写String的方法了
Writes a string.
Parameters:
str String to be written
Throws:
IOException - If an I/O error occurs 都大三了还踩这种坑也是惭愧啊