Textdatei (.txt) in Java automatisch alle 4 Sekunden einlesen?

3 Antworten

Ein Timer Beispiel ist schnell geschrieben:

int intervall = 4000;
        Timer timer = new Timer();
        TimerTask timertask = new TimerTask() {
            @Override
            public void run() {
                // Dein Code hier
}
};
timer.schedule(timertask, 0, intervall);

Hierbei wird der Code der "run" Methode alle vier Sekunden erneut ausgeführt.

ob es eine andere Lösung gibt.

Gibt es möglicherweise. - Allerdings wäre die Frage an dich gerechnet, was denn genau passieren soll und ob es möglicherweise einen "Grund" geben kann, der dieses Wiederholen abbrechen soll.

Ob das so lange passieren soll bis eine Bedingung erfüllt ist?

Was das erneute Drücken des Buttons bewirkt?


Driver2121 
Beitragsersteller
 02.01.2017, 14:25

Ok Danke, da s werde ich nachher mal ausprobieren

0
Driver2121 
Beitragsersteller
 02.01.2017, 13:50

Passieren soll danach, dass der Inhalt der ersten Zeile aus der Textdatei (Datei hat nur eine Zeile) in einer Variable gespeichert wird und diese dann in einem Label ausgegeben wird. Das hatte ich bisher mit einem FileReader gemacht der die erste Zeile List, das dann als variable gespeichert und den label text zu: ""+variable gesetzt. Hat soweit funktioniert. Es soll danach bis gegebenenfalls der Button wobei ich einen toggle button verwendet hätte wieder in Stellung falsch ist. Dadurch wäre dann neues drücken eh Stellung falsch und es würde abbrechen. Das würde ich aber denke ich hinbekommen. Prinzipiell hatte ich es aber schon si probiert, aber als ich den code in die methode, die gestartet werden soll wenn button gedrückt ist, hat das nicht funktioniert. Kann ich das prinzipiell überhaupt direkt in die Methode schreiben? Oder wo muss das hin und dann in der methode nur noch timer = start o.ä schreiben? Danke für ihre Mühe

0
KnusperPudding  02.01.2017, 14:04
@Driver2121

Kann ich das prinzipiell überhaupt direkt in die Methode schreiben? 

Theoretisch ja, aber es wäre 'besser' zu erstellst für die einzelnen Programm-Bereiche eigene Methoden. 

Trenne Methoden nach Sinn und Inhalt und halte diese so kurz wie möglich:

private String labelTextAusDatei() {
   String labeltext = ....
    ....
   return labeltext;
}
private void aktualisiereLabelText() {
   String labelText = labelTextAusDatei();

   this.label.setText(labelText);
}

letztere Methode kannst du dann per Timer aufrufen lassen (siehe Antwort oben).

Du schriebst bereits, dass dein Kenntnisstand noch auf Anfänger-Ebene ist, daher wirst du vermutlich gerade über das Problem gestolpert sein, dass man nicht auf alle Variablen zugreifen kann, sofern man Anonyme Klassen verwendet, wie oben bei: TimerTask und dessen Run-Methode: Verwende als Referenz innerhalb der Anonymen-Inneren-Klasse daher Deinen Klassennamen plus this plus Variable oder Methode für ein besseres Verständnis:

Beispiel:

class MeineKlasse {

private int meineVariable;

void test() {
    new Runnable() {

        @Override
        public void run() {
            MeineKlasse.this.meineVariable = 12;
        }
    }
}
0
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(() -> {
try (Stream<String> stream = Files.lines(Paths.get("test.txt"))) {
stream.forEach(System.out::println);
} catch(IOException ioe) {}
}, 0, 3, TimeUnit.SECONDS);

So zum Beispiel. Hier wird die Datei alle drei Sekunden ausgelesen und der Inhalt Zeile für Zeile ausgegeben.


Driver2121 
Beitragsersteller
 02.01.2017, 18:38

Danke

0
Driver2121 
Beitragsersteller
 02.01.2017, 13:39

Vom Prinzip her genau das was ich gesucht habe und es funktioniert auch sehr gut. Allerdings will ich immer nur die erste Zeile der Datei auslesen und diese in einem Label oder Textfeld ausgeben lassen.

Habe bisher aber die Textdatei nur über einen FileReader eingelesen und weis deshalb nicht wie ich das nun abändern muss bzw. kann. 

Wenn Sie mir das noch erklären könnten.

Vielen Dank für ihre Mühe, LG

0