[英]I want to put continuous real time data received from mqtt server into csv file. I am able to put only last message into the file
我是编程新手。 我想将从 MQTT 服务器接收到的连续实时数据放入 CSV 文件中。 但是我只能使用以下代码将最后收到的消息放入文件中。 有人可以帮我解决这个问题吗?
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
public class Subscriber implements MqttCallback {
MqttClient client;
public Subscriber() {
}
public static void main(String[] args) {
System.out.println("Start");
new Subscriber().doDemo();
System.out.println("Stop");
}
public void doDemo() {
try{
String username=username;
String password=password;
MemoryPersistence percistance=new MemoryPersistence();
client = new MqttClient(mqtturl, "java",percistance);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setUserName(username);
connOpts.setPassword(password.toCharArray());
client.connect(connOpts);
client.setCallback(this);
client.subscribe(topic);
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void connectionLost(Throwable cause) {
// TODO Auto-generated method stub
}
@Override
public void messageArrived(String topic, MqttMessage message)throws Exception {
String m;
PrintWriter pw=null;
try
{
//pw = new PrintWriter(new FileWriter("NewData.csv"),true);
pw = new PrintWriter(new File("NewData.csv"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StringBuilder builder = new StringBuilder();
String ColumnNamesList = "AccX,AccY,AccZ,GyrX,GyrY,GyrZ,MagX,MagY,MagZ"; // header
builder.append(ColumnNamesList +"\n");
pw.write(builder.toString());
System.out.println(message);
//int i=0;
//while((m=message.toString())!=null)
//{
m=message.toString();
try
{
StringBuilder builder1=new StringBuilder();
//builder1.append(i);
//builder1.append(",");
StringTokenizer st=new StringTokenizer(m); //divide string into tokens
while(st.hasMoreTokens())
{
builder1.append(st.nextToken());
builder1.append(",");
}
builder1.append('\n'); // end data statement
pw.append(builder1.toString());
//System.out.println(builder1.toString());
//System.out.println(m1);
}
catch(Exception e){
e.printStackTrace();
}
//i++;
//}
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
// TODO Auto-generated method stub
}
}
从服务器收到的消息是这样的:-2.47,1.51,-9.05,0.39,-0.11,0.05,-23.07,-0.36,-29.96
我会为此使用记录器 class 。 这是将日志数据附加到文件的标准 Java 方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.