Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hi Leute

ich will das mein Javprogramm ein Paar Variablen in einer Datei speichert(scan.bat).

String a="ECHO OFF";

String b="ping -n 1 -w 50 "+computername+" | findstr "TTL="; >NUL";

String c="if %errorlevel%==0 echo 1";

String d="if %errorlevel%==1 echo 0";

Der Text der am ende in der gespeicherten datei steht soll dann so aussehen(muss so aussehen)

@ECHO OFF

ping -n 1 -w 50 soave | findstr "TTL=" >NUL

if %errorlevel%==0 echo 1

if %errorlevel%==1 echo 0

Eigentlich nicht so schwierig.

Du musst einfach über einen FileWriter-Objekt die Strings rausschreiben.

Oder hab ich jetzt dein Problem nicht ganz verstanden!?

  • Autor

mein Problem ist eigentlich, dass ich blutiger anfänger bin und nicht weis wie FileWriter funktioniert oder wie man überhaupt etwas speichern kann.

Ich will eigentlich nur eine Methode erstellen die in der Lage ist eine ping.bat individuell für jeden benutzernamen zu erstellen

Also wenn du Java lernen willst, dann würde ich dir stark empfehlen ein geeignetes Einführungstutorial zu suchen auf dem INet oder ein gutes Buch zu kaufen. Ich kann dir leider keines empfehlen, da ich Java wärend des Studiums gelernt habe und keine Bücher hatte.

Aber es gibt einige sehr nützliche Seiten auf dem Internet.

Die Java API Documentation: Sie beschreibt alle Klassen von Java.

http://java.sun.com/j2se/1.4.2/docs/api/index.html

Die Java Language Specification: Sie erklärt und beschreibt die Sprache Java selber (z.B. wie man ein Array erzeugt, verändert, etc)

http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html

Noch was nützliches: Wie der Code überhaupt aussehen soll.

Dies beschreiben die Java Code Conventions. Ist zwar kein muss, jedoch ist gut lesbarer und vorallem einheitlicher Code schon das halbe Programmieren :-)

http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

Natürlich findest du noch viele weitere Dokumentationen und Beispiele von Java auf der Sun Microsystems Seite.

Java SDK Documentations

Aber nun zu deinem ganz spezifischen Problem.

Code des Files Scan.java:


import java.io.*;


public class Scan {

	public static void main(String[] args) {

		File file = new File("./scan.bat");

		FileWriter writer;

		String computername = "hallo";

		String a = "@ECHO OFF\n";

		String b = "ping -n 1 -w 50 " + computername + " | findstr \"TTL=\" >NUL\n";

		String c = "if %errorlevel%==0 echo 1\n"

				+ "if %errorlevel%==1 echo 0\n";



		try {

			writer = new FileWriter(file);

			writer.write(a + b + c);

			/*

			or


			writer.write(a);

			writer.write(;

			writer.write(c);

			*/


			writer.close();

		} catch(IOException e) {

			System.err.println(e);

			e.printStackTrace();

		}

	}

}

[/code]

  • Autor

Danke super der Code funzt perfekt. Aber mal angenommen ich will jetzt wissen wie der computername in dieser Bat war, wie kann ich den dann da wieder rausziehen?

Dir ein Tutorial holen (s.o.), das lesen und verstehen, wie man mit Java umgeht und es dann selber wissen.

So bringt Dir das nichts. Du kannst nicht jede einzelne Frage beantworten lassen. Da lernst Du nichts.

Aber als Stichworte: Date mit InputStream oder Reader öffnen, lesen bis zum gewünschten Punkt, Wert merken, fertig.

Peter

Eigentlich hat kingofbraint recht. Deine Probleme sind relativ einfach und würden sich perfekt eignen um Java zu lernen. An einfachen Problemen lernt man am besten/einfachsten.

Aber da es mir langweilig ist, habe ich trotzdem schon einiges geschrieben.

Am besten würde man dies mit Regular Expressions machen.

http://www.perldoc.com/perl5.6/pod/perlre.html (kommt ursprünglich von perl, aber wird mittlerweilen in allen Programmiersprachen unterstützt).

Ich bin leider nicht so vertraut mit Regular Expressions und müsste auch zuerst Dokus durchlesen.

Es gibt jedoch eine Möglichkeit, indem man sich das Wissen um den Aufbau des Files zu nutze macht.

Wir wissen, dass die Zeile mit "ping -n 1 -w 50" beginnt und mit " | findstr \"TTL=\" >NUL" aufhört. Also kann man danach suchen :-)

In der JavaAPI finden wir schön beschrieben wie das Gegenstück zum FileWriter heisst und funktioniert: FileReader.


import java.io.*;


/**

 * This Program is written as example for file writing and reading.

 *

 * @author MikeVader

 * @since 1.1

 */

public class Scan {

    public static final String pingPrefix = "ping -n 1 -w 50 ";

    public static final String pingPostfix = " | findstr \"TTL=\" >NUL";


    public static void main(String[] args) {

        File file = new File("./scan.bat");

        String computerName = "pc01";

        Scan scan = new Scan();


        scan.createPingFile(file, computerName);

        System.out.println(scan.getComputerName(file));

    }


    /**

     * Generate a batch-file to ping a given computer.

     *

     * @param file The name and path for the batch-file.

     * @param computerName The name of the computer

     */

    public void createPingFile(File file, String computerName) {

        FileWriter writer;

        String a = "@ECHO OFF\n";

        String b = pingPrefix + computerName + pingPostfix + "\n";

        String c = "if %errorlevel%==0 echo 1\n"

                + "if %errorlevel%==1 echo 0\n";



        try {

            writer = new FileWriter(file);

            writer.write(a + b + c);

            /*

            or


            writer.write(a);

            writer.write(;

            writer.write(c);

            */


            writer.close();

        } catch (IOException e) {

            System.err.println(e);

            e.printStackTrace();

        }

    }


    /**

     * Retrieve the computername out of a previously generated batch-file.

     *

     * @param file The generated batch-file.

     * @return The computername.

     */

    public String getComputerName(File file) {

        String computerName = new String();

        BufferedReader reader;


        try {

            String line;

            /*

             Für etwas besseren Komfort beim einlesen verwenden wir

             den BufferedReader der auf dem FileReader aufsetzt.

             Würde jedoch auch ohne gehen.

            */

            reader = new BufferedReader(new FileReader(file));


            while ((line = reader.readLine()) != null) {

                if (!line.startsWith(pingPrefix) || !line.endsWith(pingPostfix))

                    continue;


                computerName =

                    line.substring(pingPrefix.length(), line.indexOf(pingPostfix));

            }


            reader.close();

        } catch (FileNotFoundException e) {

            System.err.println(e);

            e.printStackTrace();

        } catch (IOException e) {

            System.err.println(e);

            e.printStackTrace();

        }


        return computerName;

    }

}

[/code]

Du wunderst dich sicher über die etwas seltsam anmutenden Kommentare die ich geschrieben habe. Dies hat mit javadoc zu tun.

Natürlich findest du noch viele weitere Dokumentationen und Beispiele von Java auf der Sun Microsystems Seite.

Java SDK Documentations

Tja leider stimmt mein Link nicht... Sorry. Hier der richtige:

Java SDK Documentation

  • Autor

Ja O.K. ihr habt schon recht wenn ihr meint es wäre besser erst mal gründlich nachzulesen.

Aber irgendwie hatte ich bei der Lösung des Problems immer das speichern in Visual Basic im hinterkopf und bin dadurch dann komplett vom weg abgekommen.

Jedenfalls hab ich jetzt ein super Programm mit graphischer Oberfläche und optimaler funktionalität. Aber gibt es irgendwie eine Möglichkeit das beim starten des Programms das DOS-Fenster nicht angezeigt wird?

Ich meine gibt es irgendwelche Parameter für JAVA.exe die dafür sorgen das das interpreter-Fenster im Hintergrund ist? Sieht nämlich echt hässlich aus wie es momentan ist.

javaw.exe

Peter

  • Autor

Danke! Und gibt es irgendwie eine Möglichkeit eine Datei zu erstellen die ein JAVA-Programm unkompliziert aufruft?

Im Moment geschieht der Programmaufruf bei mir für den User über ne Batch-Datei aber wenn das Programm in einen anderen Ordner verschoben würde hätte der User wohl weniger freude daran.

Die ganze Applikation in ein jar-File packen. Da musst du aber nachlesen wie es geht! (ich habe die Erfahrung gemacht, dass man besser diese Arbeit von ant machen lässt. Aber man kanns natürlich auch von Hand machen.

Und auch für die letzten beiden Fragen gilt: Du hättest es schneller bei www.javabuch.de nachgeschlagen.

Peter

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.