Textdatei auslesen und über Mqtt schicken

K

kevmitnick

Gast
Ich will eine Textdatei auslesen, in der zeilenweise jeweils irgendwas steht. Anschließend soll das ausgelesene an einen Mqtt Broker (Mosquitto) versendet werden, sodass ein anderer Client es empfangen kann. Der Transport via Mqtt ist mir soweit klar, ich hänge nur noch daran die entsprechenden Zeichen zu übergeben. Hier mal ein Auszug aus meinen bisherigen Klassen zum Auslesen der Datei und der anschließenden Übertragung per Mqtt.

Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class FileScanner {
      
       public static void main (final String[] args) throws FileNotFoundException{
                          
             final List<String> uoData = new ArrayList<>();
             final String pathname = "C:/Users/.../test.txt";
             final File txtFile = new File(pathname);
            
             final Scanner scanner = new Scanner(txtFile);
             while(scanner.hasNextLine()) {
                    final String line = scanner.nextLine();
                    uoData.add(line);
             }
             scanner.close();
            
             /*for(int i = 0; i < uoData.size(); i++) {
                    System.out.println(uoData.get(i));
             }*/
       }
}

Dieser Teil liest meine Textdatei aus, was soweit auch gut funktioniert. Der auskommentierte Teil diente lediglich der Überprüfung.


Java:
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class Publish {
       public static void main(final String[] args) throws MqttException{
            
             final String broker = "tcp://...";
             final String topicName = "demo/1";
             final int qos = 2;
            
             final MqttClient client = new MqttClient(broker, MqttClient.generateClientId());
            
             final MqttConnectOptions connOpts = new MqttConnectOptions();
             connOpts.setCleanSession(false);
             connOpts.setKeepAliveInterval(1000);
            
             final MqttMessage message = new MqttMessage(s.getBytes());
             message.setQos(qos);
             message.setRetained(true);
                                              
             client.connect(connOpts);
             client.getTopic(topicName).publish(message);
            
       }
}

Hier steht soweit auch alles, bis auf den String der übergeben werden soll. Wenn ich beispielsweise String s = "HelloWorld" setze, wird HelloWorld an den MqttBroker übergeben. Aber wie kann ich die ArrayList uoData aus dem FileScanner an den Broker übergeben?
Prinzipiell brauch ich ja nur Zugriff auf uoData, dann kann ich ja mittels for Schleife, die ArrayList auslesen.
Java:
for(int i = 0; i < uoData.size(); i++){
    String s = uoData.get(i);
}

Aber wie komme ich an uoData ran, wenn ich mich in der Klasse Publish befinde?
 

temi

Top Contributor
Aber wie komme ich an uoData ran, wenn ich mich in der Klasse Publish befinde?

Es gibt da mehrere Möglichkeiten, aber generell sollte man getrennte Funktionalitäten in separaten Klassen kapseln. Ich würde demnach die Methode main() aus deinen beiden bisherigen Klassen entfernen und in eine dritte Klasse verlagern. In dieser Klasse kannst du eine Instanz von FileScanner und eine Instanz von Publish(er) erzeugen und verwenden. Du musst diese beiden Klassen nur um

- eine gettermethode zum Auslesen der Liste
- eine publish(List<String> data)-Methode zur Übergabe der Liste

ergänzen.

Den Pfad zur Datei würde ich im Konstruktor des FileScanners übergeben und die Verbindungsdaten im Konstruktor des Publishers.

Damit kommt ungefähr folgendes heraus:
Java:
public static void main(final String[] args) {
    fileScanner = new FileScanner("C:/Users/.../test.txt");
    publisher = new Publisher("tcp://...", "demo/1");

    publisher.publish(fileScanner.getData());
}

Evtl. gehört der TopicName auch als zusätzlicher Parameter zu publish(), anstatt in den Konstruktor. Ich kenne Mqtt nicht.
 
Zuletzt bearbeitet:
K

kevmitnick

Gast
Danke, habe es aber noch nicht so ganz verstanden.
Für meine FileScanner Klasse, zwei Methoden:

Code:
private read() throws FileNotFoundException{
                
        final List<String> uoData = new ArrayList<>();
        final String pathname = "C:/.../test.txt";
        final File txtFile = new File(pathname);
        
        final Scanner scanner = new Scanner(txtFile);
        while(scanner.hasNextLine()) {
            final String line = scanner.nextLine();
            uoData.add(line);
        }
        scanner.close();
        
        /*for(int i = 0; i < uoData.size(); i++) {
            System.out.println(uoData.get(i));
        }*/
    }
    
    private getData() {
        
    }

Aber wie sehen hierbei die Methodenköpfe aus? Also brauche ich Rückgabewerte oder habe ich void Methoden?
Die gleiche Frage auch für meine Methode send() in der Klasse Publish.

Java:
private send() throws MqttException{
        
        final String broker = "tcp://...";
        final String topicName = "demo/1";
        final int qos = 2;
        
        final MqttClient client = new MqttClient(broker, MqttClient.generateClientId());
        
        final MqttConnectOptions connOpts = new MqttConnectOptions();
        connOpts.setCleanSession(false);
        connOpts.setKeepAliveInterval(1000);
        
        final MqttMessage message = new MqttMessage(s.getBytes());
        message.setQos(qos);
        message.setRetained(true);
                            
        client.connect(connOpts);
        client.getTopic(topicName).publish(message);
        
    }

Was muss ich hier entfernen/ergänzen?
 
K

kevmitnick

Gast
So ich muss es jetzt zur Verständnis hier nochmal niederschreiben, damit ich es kapiere.
Ich habe eine Klasse FileScanner, die das Attribut uoData besitzt, bei dem es sich um eine leere ArrayList handelt.
Außerdem besitzt diese Klasse die Methode readFile(), die die Datei ausliest. Diese Mehtode muss das File txtFile übergeben bekommen, damit sie weiß was ausgelesen werden soll. Außerdem brauch man noch eine getUoData() Methode, die die befüllte ArrayList uoData zurück gibt.

Code:
public class FileScanner {
    
    List<String> uoData = new ArrayList<>();
    
    ... readFile() throws FileNotFoundException {
    
        Scanner scanner = new Scanner(txtFile);
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            uoData.add(line);
        }
        scanner.close();
    }
    
    ... List<String> getUoData(...) {
    
        return uoData;
    }
}

Bei den Punkten bin ich mir nicht sicher, ob public/private/protected bzw. der jeweilige Parameter.
Das ist der eine Teil. Also ist das bisher korrekt und was muss für die Punkte rein?

In der Klasse Publisher brauchen wir die Attribute broker, topicName und die beschrieben ArrayList uoData. Außerdem muss die Klasse über die Methode send() verfügen, die die Inhalte der ArrayList byteweise ausliest und dann an den Broker und einem bestimmten topicName verschickt.

Java:
public class Publisher{

    ???
    
    ??? send(???) throws MqttException {
    
        MqttClient client = new MqttClient(broker, MqttClient.generateClientId());
        MqttConnectOptions connOpts = new MqttConnectOptions();
        connOpts.setCleanSession(false);
        connOpts.setKeepAliveInterval(1000);
        
        MqttMessage message = new MqttMessage(???.getBytes());
        message.setQos(2);
        message.setRetained(true);
        
        client.connect(connOpts);
        client.getTopic(topicName).publish(message);
    }
    
    ???
              
    
}

Hier bin ich mir bei allen Fragezeichen nicht sicher.

Bitte kann mir jemand behilflich sein, sodass ich es verstehe.
 

mrBrown

Super-Moderator
Mitarbeiter
Mein Rat wäre, dich erst mit den Grundlagen von Java zu beschäftigen, bevor du dich mit sowas wie MQTT beschäftigst.
Man könnte dir natürlich alles vorsagen, aber ist das sinnvoll?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
K Textdatei auslesen Java Basics - Anfänger-Themen 10
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
S Methoden Textdatei auslesen Java Basics - Anfänger-Themen 11
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
S Methoden Textdatei Teil String auslesen Java Basics - Anfänger-Themen 3
W letzte Zeile aus wachsender Textdatei auslesen Java Basics - Anfänger-Themen 5
Fab1 Input/Output Textdatei auslesen Java Basics - Anfänger-Themen 4
P Mit offset aus Textdatei auslesen Java Basics - Anfänger-Themen 3
V Falsches Auslesen von Textdatei Java Basics - Anfänger-Themen 3
T Input/Output 20Mb Textdatei zeilenweise auslesen Java Basics - Anfänger-Themen 10
N In Textdatei speichern und auslesen Java Basics - Anfänger-Themen 18
K Input/Output Textdatei scheibchenweise auslesen Java Basics - Anfänger-Themen 8
D 1 Wort aus TextDatei auslesen Java Basics - Anfänger-Themen 3
B OOP Aus Textdatei auslesen Java Basics - Anfänger-Themen 11
M Update-Ticker... String in Textdatei schreiben und auslesen Java Basics - Anfänger-Themen 5
S Datentypen Array in Textdatei speichern und auslesen Java Basics - Anfänger-Themen 16
A Textdatei von URL auslesen und in Datei schreiben Java Basics - Anfänger-Themen 5
G Textdatei auslesen lassen Java Basics - Anfänger-Themen 5
G Textdatei in Java auslesen Java Basics - Anfänger-Themen 5
G bestimmte Stelle aus Textdatei auslesen. Java Basics - Anfänger-Themen 7
T Textdatei komplett auslesen Java Basics - Anfänger-Themen 6
G Auslesen einer bestimmten Stelle in einer Textdatei? Java Basics - Anfänger-Themen 2
S Datei auslesen und neue schreiben (keine Textdatei) Java Basics - Anfänger-Themen 2
M Auslesen aus Textdatei Java Basics - Anfänger-Themen 12
N Textdatei zeilenweise auslesen Java Basics - Anfänger-Themen 8
I Query aus Textdatei auslesen? Java Basics - Anfänger-Themen 4
M Fehler beim ein- und auslesen einer Textdatei Java Basics - Anfänger-Themen 5
C Textdatei unter Linux/Solaris auslesen bzw. ändern Java Basics - Anfänger-Themen 2
G Textdatei auslesen - Text anfügen - FileReader Java Basics - Anfänger-Themen 18
G Wie kann ich mit Java eine Textdatei auslesen? Java Basics - Anfänger-Themen 20
G nur bestimmte zeile aus textdatei auslesen Java Basics - Anfänger-Themen 2
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
S Importieren einer Textdatei Java Basics - Anfänger-Themen 2
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
S Übertragen einer Textdatei in ein 2d-Array Java Basics - Anfänger-Themen 2
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
C Textdatei oder doch eine Datenban Java Basics - Anfänger-Themen 15
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
M Textdatei(en) in .jar schreiben Java Basics - Anfänger-Themen 5
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
K Erste Schritte Textdatei -> Array Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
G Textdatei auf Dubletten prüfen Java Basics - Anfänger-Themen 8
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
T Textdatei beschreiben/bearbeiten Java Basics - Anfänger-Themen 4
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
R Werte in eine Textdatei schreiben Java Basics - Anfänger-Themen 20
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
D Textdatei in geschachtelte Array speichern Java Basics - Anfänger-Themen 17
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
J Textdatei einlesen und ausgeben - NullPointerException Java Basics - Anfänger-Themen 5
M Input/Output Objekte in einer Textdatei ablegen (Highscore) Java Basics - Anfänger-Themen 9
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3
K Input/Output Eingelesenedaten von Scanner als Textdatei ausgeben? Java Basics - Anfänger-Themen 2
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7
V Auf Textdatei in jar zugreifen Java Basics - Anfänger-Themen 3
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
J durch drücken eines buttons text in einer textdatei speichern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben