繁体   English   中英

我想将从 mqtt 服务器接收到的连续实时数据放入 csv 文件中。 我只能将最后一条消息放入文件中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM