在JAVA中用buffer writer向TXT文件中写入信息,为什么会将将上一次所输入的再重新写入一遍?
时间: 2024-02-13 17:01:12 浏览: 68
可能是因为你在写入完毕后没有将缓冲区清空,导致之前的内容没有被清除而被重复写入。你可以在写入完毕后使用 flush() 方法清空缓冲区,或者在创建 BufferedWriter 对象时指定 autoFlush 参数为 true,这样在写入完毕后会自动清空缓冲区。以下是一个使用 autoFlush 参数的示例代码:
```
try (BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"), true)) {
writer.write("Hello, world!");
// autoFlush 参数为 true,写入完毕后会自动清空缓冲区
}
```
相关问题
在vs2017中用C#写一段程序,需要通过上位机传输UDS报文,将上位机传输的报文和实时时间写入一个txt文件中并输出。
以下是一份简单的示例程序:
```csharp
using System;
using System.IO;
using System.IO.Ports;
using System.Text;
namespace UDSLogger
{
class Program
{
static void Main(string[] args)
{
// 打开串口
SerialPort port = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
port.Open();
// 创建文件并打开
string fileName = "UDSLog_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
StreamWriter writer = new StreamWriter(fileName, true, Encoding.UTF8);
// 循环读取串口数据
while (true)
{
if (port.BytesToRead > 0)
{
// 读取串口数据
byte[] buffer = new byte[port.BytesToRead];
port.Read(buffer, 0, buffer.Length);
// 将数据写入文件
writer.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff\t"));
writer.WriteLine(BitConverter.ToString(buffer).Replace("-", " "));
// 输出到控制台
Console.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff\t"));
Console.WriteLine(BitConverter.ToString(buffer).Replace("-", " "));
}
}
// 关闭文件和串口
writer.Close();
port.Close();
}
}
}
```
这个程序会不断循环读取串口数据,并将每次读取到的数据和实时时间写入一个以当前时间命名的文本文件中,并输出到控制台。你需要修改 COM1 为你的串口号,以及根据需要修改波特率、奇偶校验、数据位和停止位等参数。
阅读全文