Skróceniem ilości wyświetlanych przez program wartości.

0

Cześć, od niedawna próbuję uczyć się javy i mam pewien problem. Napisałem program (z pomocą googla), który sprawdza co 10sekund połączenie z internetem wyrzucając true lub false oraz tworząc log tego co wyrzuci. Problem polega na tym, że po np. godzinie działania programu jest to nieczytelne, jest po prostu za dużo linijek. Chciałbym zrobić, aby wyświetlane wartości np true przez godzinę zostawały w 1 linijce ( z aktualną datą i godziną ), a dopiero zmiana z true na false lub odwrotnie tworzyła nową linijkę. Jest coś takiego możliwe ? Głowiłem się nad tym trochę i nie wiem jak to zrobić ani jak dokładnie wpisać w google żeby znaleźć pomoc.

import java.net.*;
import java.io.*;
import java.util.*;


public class Net {
	

	public static void main(String[] args) {






		for (;;) {
			GregorianCalendar dziś = new GregorianCalendar();
			
			

			System.out.printf(" %tc", dziś);
			System.out.println(":Podłączony do internetu -> "
					+ (testInet("gmail.com") || testInet("google.com") || testInet("amazon.com")));

			try (FileWriter fw = new FileWriter("LogNet.txt", true);
					BufferedWriter bw = new BufferedWriter(fw);
					PrintWriter out = new PrintWriter(bw)) {
						out.printf("%tc", dziś);
						out.println(" :Podłączony do internetu -> "
					+ (testInet("gmail.com") || testInet("google.com") || testInet("amazon.com")));

			} catch (IOException e) {
			}

			try {
				Thread.sleep(10000); // wykonuj pętle co 10s ( 1000 = 1s )
			}

			catch (Exception e) {
			}

		}




	}

	public static boolean testInet(String site) {
		Socket sock = new Socket();
		InetSocketAddress addr = new InetSocketAddress(site, 80);
		try {
			sock.connect(addr, 3000);
			return true;
		} catch (IOException e) {
			return false;
		} finally {
			try {
				sock.close();
			} catch (IOException e) {
			}
		}
		
	}

}

1

Masz wszystko co potrzeba. Zapamiętaj poprzedni stan i porównaj z bieżącym. Jak wykryjesz zmianę, to zaloguj co trzeba.

public class Test {

    public enum LinkState {Undefined, Link_Up, Link_Down}

    LinkState prevState = LinkState.Undefined;
    LinkState currState;
    Random rnd = new Random();

    public LinkState getLinkState() {
        if (rnd.nextInt() % 2 == 0) {
            return LinkState.Link_Up;
        }
        return LinkState.Link_Down;
    }

    public void doTheLogic() {

        for (;;) {
            currState = getLinkState();
            if (currState != prevState) {
                System.out.printf(" ---> Wykryto zmiane stanu: %s -> %s\n", prevState, currState);
            }
            prevState = currState;
            try {
                System.out.println("Zzzzz...");
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // ignore
                System.out.println("Awoken!");
            }
        }
    }

    public static void main(String[] args) {
        Test foo = new Test();
        foo.doTheLogic();
    }

}
0

W końcu udało mi się zrobić to co chciałem, dzięki za pomoc. Mam jednak kolejny problem, log się ładnie zapisuje, ale chciałbym, aby w drugim pliku zapisywała się różnica w np godzinach ile czasu nie było internetu. Czyli np screenshot-20170720120516.png a w loguscreenshot-20170720120502.png Drugi plik ( który jest zaznaczony jako komentarz w kodzie ) chciałbym aby był różnicą czasów poprzednich 2 stanów ( w tym wypadku wyrzucałby informację, że nie bylo internetu przez 37 sekund ). Prosiłbym chociaż o jakieś wskazówki jak to zacząć / zrobić.



import java.net.*;
import java.io.*;
import java.util.*;

public class Net {

	public enum LinkState {
		Początkowy, Połączony, Niepołączony
	}

	LinkState prevState = LinkState.Początkowy;
	LinkState currState;

	public static boolean testInet(String site) {
		Socket sock = new Socket();
		InetSocketAddress addr = new InetSocketAddress(site, 80);
		try {
			sock.connect(addr, 3000);
			return true;
		} catch (IOException e) {
			return false;
		} finally {
			try {
				sock.close();
			} catch (IOException e) {
			}
		}

	}

	public LinkState getLinkState() {

		if (testInet("gmail.com") == true || testInet("google.com") == true || testInet("amazon.com") == true) {
			return LinkState.Połączony;
		}
		return LinkState.Niepołączony;
	}

	public void doTheLogic() {

		for (;;) {

			GregorianCalendar dziś = new GregorianCalendar();

			currState = getLinkState();
			if (currState != prevState) {
				System.out.printf("%tc", dziś);
				System.out.printf(" --> Wykryto zmianę stanu połączenia: %s -> %s\n", prevState, currState);

				try (FileWriter fw = new FileWriter("LogNet.txt", true);
						BufferedWriter bw = new BufferedWriter(fw);
						PrintWriter out = new PrintWriter(bw)) {

					out.printf("%tc", dziś);
					out.printf(" --> Wykryto zmianę stanu połączenia: %s -> %s\n", prevState, currState);
					out.println("");

				} catch (IOException e) {
				}
				
	/*				try (FileWriter fw = new FileWriter("LogNet2.txt", true);
						BufferedWriter bw = new BufferedWriter(fw);
						PrintWriter out = new PrintWriter(bw)) {

					out.printf("%tc", dziś);

				} catch (IOException e) {
				}                                                                     */
			}

			prevState = currState;

			try {
				Thread.sleep(5000); // wykonuj pętle co 5s ( 1000 = 1s )
			}

			catch (Exception e) {
			}

		}

	}

	public static void main(String[] args) {
		Net foo = new Net();
		foo.doTheLogic();

	}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1