speedi Geschrieben 13. Oktober 2004 Geschrieben 13. Oktober 2004 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 Zitieren
MikeVader Geschrieben 13. Oktober 2004 Geschrieben 13. Oktober 2004 Eigentlich nicht so schwierig. Du musst einfach über einen FileWriter-Objekt die Strings rausschreiben. Oder hab ich jetzt dein Problem nicht ganz verstanden!? Zitieren
speedi Geschrieben 14. Oktober 2004 Autor Geschrieben 14. Oktober 2004 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 Zitieren
MikeVader Geschrieben 14. Oktober 2004 Geschrieben 14. Oktober 2004 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] Zitieren
speedi Geschrieben 14. Oktober 2004 Autor Geschrieben 14. Oktober 2004 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? Zitieren
kingofbrain Geschrieben 14. Oktober 2004 Geschrieben 14. Oktober 2004 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 Zitieren
MikeVader Geschrieben 14. Oktober 2004 Geschrieben 14. Oktober 2004 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. Zitieren
MikeVader Geschrieben 14. Oktober 2004 Geschrieben 14. Oktober 2004 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 Zitieren
speedi Geschrieben 15. Oktober 2004 Autor Geschrieben 15. Oktober 2004 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. Zitieren
speedi Geschrieben 15. Oktober 2004 Autor Geschrieben 15. Oktober 2004 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. Zitieren
MikeVader Geschrieben 15. Oktober 2004 Geschrieben 15. Oktober 2004 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. Zitieren
kingofbrain Geschrieben 15. Oktober 2004 Geschrieben 15. Oktober 2004 Und auch für die letzten beiden Fragen gilt: Du hättest es schneller bei www.javabuch.de nachgeschlagen. Peter Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.