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

本文探讨了在JavaWeb项目中如何正确地使用文件系统来持久化存储登录人数的问题,并详细解释了在使用BufferedWriter.write方法时需要注意的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在完成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
都大三了还踩这种坑也是惭愧啊

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值