wikki Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 (bearbeitet) Hallo Ich möchte gern in eine txt Datei schreiben: BufferedWriter bw = null; bw = new BufferedWriter(new FileWriter("bla")); Dann mache ich: bw.append("<----------------- Ausgabe ----------------->"); bw.newLine(); Das klappt soweit wunderbar! Nun habe ich verschiedene Fälle welche in try - catch Blöcken stehen, also z.b. wenn a = a gib "blabla" aus usw. Leider geht das aber nicht. Er zeigt mir zwar oben die Ausgabe an, aber dann hört er auf... Habt Ihr Ideen woran das liegen könnte? Ich würd euch auch meinen Code zeigen, aber der Sorgt sicher nur wieder für Aufregung, die will ich nicht herrauf beschwören ;D Danke im Vorraus! Edit: Ich habe übrigens alles wie oben also bw.append("") geschrieben, und dannach ein bw.flush() .. Bearbeitet 18. Juli 2011 von wikki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 wenn a = a gib "blabla" aus usw. Hi. Wenn du tatsächlich "a = a" im Code stehen hast, dann kann dies nicht funktionieren. Das ist nämlich kein Vergleich, sondern eine Zuweisung. Ohne Code kann dir hier niemand helfen. Poste doch einfach den relevanten Code. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 18. Juli 2011 Autor Teilen Geschrieben 18. Juli 2011 Danke schonmal Also vorab, ich möchte KEINE Diskussion wie sinnvoll oder richtig oder sonstiges mein Programm ist! Also: BufferedWriter bw = null; FileWriter fw = new FileWriter("Portprüfung_ausgabe.txt"); bw = new BufferedWriter(fw); bw.append("<----------------- Ausgabe des Virenscanner Portprüfers! ----------------->"); bw.newLine(); bw.flush(); try { if (ia.isReachable(1000)){ check = true; System.out.println("IP Erreichbar"); } else { System.out.println("IP ist nicht erreichbar!"); check =false;} } catch (IOException e) { e.printStackTrace(); } if (check == true){ try { Socket s = new Socket(ia,port); System.out.println("Gegenstelle hat Port Nummer: " + port+ ". IP Adresse: " + hostname); bw.write("IP Adresse: "+ia+" hat den gesuchten Port: " + port); bw.newLine(); bw.flush(); s.close();} catch (IOException e2) { check2 =true;} } if (check2 == true){ try { Socket s = new Socket(ia,winport1); System.out.println("Gegenstelle hat Port Nummer: " + winport1+ ". IP Adresse: " + hostname); bw.append("IP Adresse: "+ia+" ist anpingbar, läuft jedoch auf den Windowsport: " + winport1 ); bw.flush(); s.close();} catch (IOException e2) { check3 =true;} } if ( check3 == true){ try { System.out.println("Gegenstelle hat Port Nummer: " + winport2+ ". IP Adresse: " + hostname); Socket s = new Socket(ia,winport2); bw.append("IP Adresse: "+ia+" ist anpingbar, läuft jedoch auf den Windowsport: " + winport2); bw.flush(); bw.close(); s.close();} catch (IOException e2) { check4 =true;} } if (check4 == true){ { try { bw.append("IP Adresse: "+ia+" ist anpingbar, läuft jedoch weder auf den Windowsports: " + winport1 + "+" +winport2+ " Noch auf den gesuchten Port: " + port+" >>>ER IST DAHER UNSICHER!<<<"); bw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } 10000 Dank im Vorraus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 (bearbeitet) Darf ich fragen, was der Code dort überhaupt machen soll ? Was ist: winport1 winport2 check check2 check3 check4 Wieso benutzt du Exceptionhandling um irgendwelche Variablen auf true zu setzen ? Auch wenn es in deinem Kopf logisch aussieht. Das muss nicht zwangsläufig in unseren Köpfen genauso sein. Der Code dort oben ist ein pures Wirrwarr. Wenn du damit anfangen würdest, den Code aufzuräumen und v.A. zu kommentieren, dann könntest du die Probleme eventuell sogar selbst lösen. Ansonsten benutz doch mal: bw.write("bla"); anstatt dem bw.append(). Den permanenten flush() kannst du dir (meiner Meinung nach) auch sparen. //Edit Ich seh grad, dass du den BufferedWriter mitten im Code doch schließst. Aber ihn dann später trotzdem noch ansprichst, wenn er brereits geschlossen ist (check4) Das wird in einer NPE resultieren. Benutze try/catch/finally-blocks doch mal korrekt und schließe die Writer/Streams am Ende deines Programms, nicht mitten drin. Bearbeitet 18. Juli 2011 von i � unicode Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 Ich würde mal versuchen ein bw.close() an eine Stelle zu setzen die auf jeden Fall aufgerufen wird, nachdem wirklich alle Schreibvorgänge in die Datei stattgefunden haben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 18. Juli 2011 Autor Teilen Geschrieben 18. Juli 2011 (bearbeitet) Woa, immer wenn ich was mit direkt Antworten schreibe (und das war nich wenig eben-.-) isses nachm Absenden weg....anyway: Also ich poste euch mal die Methode, port und inetaddress wird übergeben alles weitere seht ihr hier: //Variablen, 2 Windowsports, 4 Schalter für If-Bestimmungen int winport1 = 135; int winport2= 445; boolean check = false; boolean check2 = false; boolean check3 = false; boolean check4 = false; String hostname = ia.getHostName(); // Der BuffedWriter und FileWriter BufferedWriter bw = null; FileWriter fw = new FileWriter("Portprüfung_ausgabe.txt"); bw = new BufferedWriter(fw); //Erste Zeile im Dokument bw.append("<----------------- Ausgabe des Virenscanner Portprüfers! ----------------->"); bw.newLine(); //Wenn erreichbar, setze Check auf Wahr, ansonsten nächste IP anpingen try { if (ia.isReachable(1000)){ check = true; System.out.println("IP Erreichbar"); } else { System.out.println("IP ist nicht erreichbar!"); check =false;} } catch (IOException e) { e.printStackTrace(); } //Wenn Check wahr ist, schaue nach ob die IP mit dem übergebenen Port erreichbar ist if (check == true){ try { Socket s = new Socket(ia,port); System.out.println("Gegenstelle hat Port Nummer: " + port+ ". IP Adresse: " + hostname); bw.write("IP Adresse: "+ia+" hat den gesuchten Port: " + port); bw.newLine(); s.close();} catch (IOException e2) { check2 =true;} } //Wenn nicht, schaue ob die die 2 Windowsports da sind if (check2 == true){ try { Socket s = new Socket(ia,winport1); System.out.println("Gegenstelle hat Port Nummer: " + winport1+ ". IP Adresse: " + hostname); bw.append("IP Adresse: "+ia+" ist anpingbar, läuft jedoch auf den Windowsport: " + winport1 ); s.close();} catch (IOException e2) { check3 =true;} } if ( check3 == true){ try { System.out.println("Gegenstelle hat Port Nummer: " + winport2+ ". IP Adresse: " + hostname); Socket s = new Socket(ia,winport2); bw.append("IP Adresse: "+ia+" ist anpingbar, läuft jedoch auf den Windowsport: " + winport2); s.close();} catch (IOException e2) { check4 =true;} } //Wenn auch nicht, dann gib einfach aus das keiner der fälle oben eingetroffen ist if (check4 == true){ { try { bw.append("IP Adresse: "+ia+" ist anpingbar, läuft jedoch weder auf den Windowsports: " + winport1 + "+" +winport2+ " Noch auf den gesuchten Port: " + port+" >>>ER IST DAHER UNSICHER!<<<"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } bw.close(); } Das Programm pingt eine IP an, schaut ob sie da ist, wenn ja ob der Port da ist, wenn nein ob 2 winports da sind, wenn nein einfach ausgeben das nichts von oben funktioniert hat. Ich will nochmal BETONEN & BITTEN nicht über den Code an sich zu diskutieren. ich weiß das er weder schön, noch evt. elegant, noch die Problemstellung optimal löst, noch(...). Ich möchte einfach nur das ganze in die Datei schreiben Nochmals 1000 Dank! Bearbeitet 18. Juli 2011 von wikki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 Also mit dem bw.close() am Ende funktioniert es bei mir. Er schreibt alles in die Datei. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 (bearbeitet) Prima. Trotzdem der Hinweis: Tu dir selbst einen Gefallen und versuch mal, ordentlich strukturiereten und dokumentierten Code zu schreiben //Edit: Ich bin mir nicht sicher, aber ich glaube, dass das hier 1:1 das gleiche macht, wie dein Code: // Variablen // hier deine PORTS eintragen: int[] ports = new int[] { 80, 33, 66, 443, 225, 778, 80, 8080 }; int[] winPorts = new int[] { 135, 445 }; BufferedWriter bw = null; try { // Der BuffedWriter und FileWriter bw = new BufferedWriter(new FileWriter("Portprüfung_ausgabe.txt")); // Erste Zeile im Dokument bw.write("<----------------- Ausgabe des Virenscanner Portprüfers! ----------------->"); bw.newLine(); InetAddress ia = InetAddress.getByName("127.0.0.1"); if (ia.isReachable(1000)) { for (int iCounter = 0; iCounter < ports.length; iCounter++) { try { Socket s = new Socket(ia, ports[iCounter]); if (s.isConnected()) { System.out.println("Gegenstelle hat Port Nummer: "+ ports[iCounter] + ". IP Adresse: " + ia.getHostName()); bw.write("IP Adresse: " + ia + " hat den gesuchten Port: " + ports[iCounter]); bw.newLine(); }else{ bw.write("IP Adresse: " + ia + "ist unter dem Port "+ports[iCounter]+" nicht erreichbar"); bw.newLine(); } s.close(); } catch (ConnectException ex) { continue; } } } else { for (int iCounter = 0; iCounter < winPorts.length; iCounter++) { Socket s = new Socket(ia, winPorts[iCounter]); if (s.isConnected()) { System.out.println("Gegenstelle hat Port Nummer: " + winPorts[iCounter] + ". IP Adresse: " + ia.getHostName()); bw.write("IP Adresse: " + ia + " hat den gesuchten Port: " + winPorts[iCounter]); bw.newLine(); }else{ bw.write("IP Adresse: " + ia + "ist unter dem Port "+winPorts[iCounter]+" nicht erreichbar"); bw.newLine(); } s.close(); } } bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } Beware of bugs in the above code; I have only proved it correct, not tried it. Bearbeitet 18. Juli 2011 von i � unicode Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 18. Juli 2011 Autor Teilen Geschrieben 18. Juli 2011 Hiho, danke für eure Antworten! Leider läufts bei mir immernoch nicht, aber ich habe da so anhaltspunkte...vielleicht könnnt ihr mir da helfen: Die Methode wird ja oft aufgerufen, es ist ja nicht nur eine IP die geprüft wird. Wenn ich daher den BufferedWriter und den FileWriter in der Methode erst anlege, wird er ja auch immer wieder neu aufgerufen, daher überschreibt der bestimmt das File immer wieder oder so... Nun wäre mein Frage wie ich das ändern kann? Ich kann ja nicht das bw an die Methode übergeben oder? Nochmals vielen Dank! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 Du kannst dem Konstruktor des FileWriters als zweiten Parameter einen Boolean Wert mitgeben, der angibt ob die Datei überschrieben oder der Inhalt angefügt werden soll: FileWriter (Java 2 Platform SE 5.0) Ansonsten, natürlich kannst du auch einen BufferedWriter an deine Methode übergeben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 18. Juli 2011 Autor Teilen Geschrieben 18. Juli 2011 (bearbeitet) Das mit dem 2. Parameter hört sich echt gut an! Leider gehts immer noch nicht..auch nicht wenn ich bw übergebe...manno EDIT: Doch, es geht! Habe jetzt den Boolean und die übergabe genutzt, es geht =D=D=D 1000DANK leute! Seid echt ne Hilfe gewesen!! Bearbeitet 18. Juli 2011 von wikki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sporticus Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 Noch ein Änderungsvorschlag: Wenn du einen Writer/Reader benutzt, muss der am Ende wirklich immer geschlossen werden. Daher würde ich dir empfehlen das immer so zu realisieren: BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter(file)); ... dein Code ... } finally { // IOUtils.closeQuitly(bw); <-- Jarkata Commons IO (sehr nützlich) if(bw != null) { bw.close() } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
::1 Geschrieben 18. Juli 2011 Teilen Geschrieben 18. Juli 2011 Prima. Trotzdem der Hinweis: Tu dir selbst einen Gefallen und versuch mal, ordentlich strukturiereten und dokumentierten Code zu schreiben //Edit: Ich bin mir nicht sicher, aber ich glaube, dass das hier 1:1 das gleiche macht, wie dein Code: // Variablen // hier deine PORTS eintragen: int[] ports = new int[] { 80, 33, 66, 443, 225, 778, 80, 8080 }; int[] winPorts = new int[] { 135, 445 }; BufferedWriter bw = null; try { // Der BuffedWriter und FileWriter bw = new BufferedWriter(new FileWriter("Portprüfung_ausgabe.txt")); // Erste Zeile im Dokument bw.write("<----------------- Ausgabe des Virenscanner Portprüfers! ----------------->"); bw.newLine(); InetAddress ia = InetAddress.getByName("127.0.0.1"); if (ia.isReachable(1000)) { for (int iCounter = 0; iCounter < ports.length; iCounter++) { try { Socket s = new Socket(ia, ports[iCounter]); if (s.isConnected()) { System.out.println("Gegenstelle hat Port Nummer: "+ ports[iCounter] + ". IP Adresse: " + ia.getHostName()); bw.write("IP Adresse: " + ia + " hat den gesuchten Port: " + ports[iCounter]); bw.newLine(); }else{ bw.write("IP Adresse: " + ia + "ist unter dem Port "+ports[iCounter]+" nicht erreichbar"); bw.newLine(); } s.close(); } catch (ConnectException ex) { continue; } } } else { for (int iCounter = 0; iCounter < winPorts.length; iCounter++) { Socket s = new Socket(ia, winPorts[iCounter]); if (s.isConnected()) { System.out.println("Gegenstelle hat Port Nummer: " + winPorts[iCounter] + ". IP Adresse: " + ia.getHostName()); bw.write("IP Adresse: " + ia + " hat den gesuchten Port: " + winPorts[iCounter]); bw.newLine(); }else{ bw.write("IP Adresse: " + ia + "ist unter dem Port "+winPorts[iCounter]+" nicht erreichbar"); bw.newLine(); } s.close(); } } bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } Beware of bugs in the above code; I have only proved it correct, not tried it. Ey du Nase! Du müsstes es besser wissen! Fliegt ne IOException in deinem Quelltext wird der BufferdWriter nie geschlossen. Lass das Programm dann mal auf dem Systemlaufen dass nur ne beschränke Anzahl an IOStreams erlaubt. Wie wärs mitm try-finally? Bezieht sich auf try { .... bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 19. Juli 2011 Teilen Geschrieben 19. Juli 2011 @ ::1 EEEHH! Kumpel! Das "Ding" da oben habe ich 5 Minuten vor der Mittagspause zusammengewurschtelt.. Wenn mich der Hunger plagt, kann ich nicht mehr klar denken. Beware of bugs in the above code; I have only proved it correct, not tried it. Korrekt ist er - d.H.: er funktioniert.. glaub ich. Bugs sind drin. Der finally müsste noch rein. Aber schau dir doch bitte mal den Original-Code an. Das ist ja nur ein (kleiner?) Teil vom Gesamtcode. Ich glaub, der eine finally-block fällt da nicht mehr soooo ins Gewicht. Aber du hast natürlich recht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 19. Juli 2011 Autor Teilen Geschrieben 19. Juli 2011 Hehe, nicht streiten, alles gut Wie gesagt, funktioniert einwand frei! Eine Frage hätte ich dennoch noch...ist ein wenig was anderes aber es ist mir peinlich andauernd neue Threads zu eröffnen. Ich habe ein wenig gegoogelt und leider nichts wirklich brauchbares gefunden, aber da euer Fachwissen so enorm ist, hoffe ich das Ihr mal wieder etwas mehr wisst Allso das da oben ist ja schon perfekt. Aber ich musste aufgrund der Unübersichtlichkeit die Ausgabe ein wenig ändern, leider wurds nicht übersichtlicher <.<. Und zwar sollte es Quasi Tabellenartig ausgegeben, aber da die IP immer anders "lang" ist (ich will den hostnamen ausgeben), rutscht das ganze wild durcheinander... Daher ist nun meine Frage ob man entweder in ne CSV Datei schreiben kann oder ggf. sogar bei ner normalen Ausgabe das entsprechend...sortiert anordnen könnte? Ich danke wie immer viel viel mals im vorraus! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 19. Juli 2011 Teilen Geschrieben 19. Juli 2011 Keine Sorge. Wir kennen uns (privat) - das ist kein Streit. Wir hatten schon so manche.. ich sage mal .. sehr fundierte Diskussion zu verschiedensten Themen. Eine CSV-Datei ist im Grunde nichts anderes, als eine Datei, in der Werte durch Trennzeichen hintereinander gestellt werden.. Siehe: Wikipedia : CSV-Dateiformat Aber mal so aus reiner Neugier: Was genau hast du eigentlich vor? Was für ein Projekt ist das? JavaMail, "Portscanner",... Wozu benötigst du das? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 19. Juli 2011 Autor Teilen Geschrieben 19. Juli 2011 Um die Weltherrschaft zu erlangen =D Nein Spaß, es ist einfach nur ein kleines Praktikums Projekt was einfach viele Bereiche abdeckt... hatte nun schon Swing, Datenbank abfragen, Netzwerkprogrammierung, JavaMail, ausgaben in Dateien... Ich lern im Moment echt unheimlich viel dazu und dank eurer Hilfe verschwinden auch offene Lücken schnell Sprich man kann ne CSV auch einfach mitm BufferedWriter schreiben, da muss ich ja nicht mal so viel abändern Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i � unicode Geschrieben 19. Juli 2011 Teilen Geschrieben 19. Juli 2011 (bearbeitet) Sprich man kann ne CSV auch einfach mitm BufferedWriter schreiben, da muss ich ja nicht mal so viel abändern Ja, kann man. Ein sehr ernstgemeinter Tipp: Bevor du weitermachst, gewöhn dir einen (guten) Programmierstil an. Ich möchte nicht sagen, dass du falsch programmierst, denn es scheint ja irgendwie zu funktionieren.. Wie gesagt... "irgendwie". Ich sage es immer wieder: Du solltest Programmieren lernen. Und keine Programmiersprache Auch wenn's eine Praktikumsaufgabe ist - mach's von vorn herein ordentlich. Dann hast du später keine Probleme bei der Umgewöhnung. Wenn du deine ersten Schritte trotzdem in Java machen möchtest (was übrigens keine schleche Wahl ist) .. kann ich dir den hier empfehlen: Gailer-Net : Java Tutorial Um die Weltherrschaft zu erlangen =D Das, mein Bester, kannste mal getrost wieder vergessen. Die hab ich mir hart erarbeitet. Bearbeitet 19. Juli 2011 von i � unicode Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 27. Juli 2011 Teilen Geschrieben 27. Juli 2011 was mir spontan dazu einfällt: CSV geht grundsätzlich (warum auch nicht?) du müsstest nur an den richtigen Stellen Semikoli (";") einsetzen (Beispielzeile: IP-Adresse;Port1;Port2;Port3;...) Tabellenartig: entweder du versuchst dies über Tabulatoren zu erreichen, wo du aber das Problem haben wirst, dass bei zu großen Schwankungen der Länge diese auch nicht mehr richtig helfen oder du ermittelst, wie lang die jeweiligen Einträge sind und füllst diese entsprechend mit Leerzeichen auf da du aber die maximale Länge einer Eintragung wissen musst, kannst du erst nach dem ermitteln der letzten Werte die maximale Länge ermitteln und damit auch erst danach mit der Ausgabe beginnen dafür wäre es notwendig, dass deine Methode nicht mehr die Datenermittelt und in die Datei ausgibt, sondern dass sie diese ermittelt und (beispielsweise als Objekt einer Klasse, die du noch schreiben muss) zurückgeben an der aufrufenden Stelle werden die Daten gesammelt, ausgewertet und ausgegeben (dies würde die Qualität des Codes verbessern, da die Ausgabe der Daten nicht mit der Sammlung der Daten vermischt ist, wodurch ggf. der Code übersichtlicher wird) generell würde ich dazu raten, dass deine Methode nur die Daten ausliest und sie an anderer Stelle in eine Datei geschrieben werden Sortierung: wonach du sortieren willst, weiß ich zwar nicht (möglicherweise nach der Verfügbarkeit der Ports), jedenfalls ict auch dafür eine Sammlung der Daten notwendig (siehe dazu den oberen Puntk) sobald alle Daten zusammengesammelt sind (für jede IP-Adresse die Methode aufgerufen wurde), kannst du alle Daten miteinander vergleichen und dadurch sortieren ggf. solltest du dich noch mit den verschiedenen Sortieralgorithmen auseinander setzen (BubbleSort, QuickSort, InsertionSort, ...) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.