关于JAVA IO流写文件数字乱码的问题

在完成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如下:

void java.io.BufferedWriter.write(int c) throwsIOException

Writes a single character.

Overrides: write(...) in Writer
Parameters:
c int specifying a character to be written//关键
Throws:
IOException - If an I/O error occurs

解决方法也很简单只需要在数字后面加上 +“” 就好,write就转换为写String的方法了

void java. io. Writer.write( String str) throws IOException

Writes a string.

Parameters:
str String to be written
Throws:
IOException - If an I/O error occurs
都大三了还踩这种坑也是惭愧啊

你可能感兴趣的:(我的错误)