In main() Datei geöffnet, von anderer Funktion beschreiben

Joerg66

Mitglied
Hallo,
ich schreibe an einem kleinen Konverter. Lese Zeilenweise eine Datei ein und muß umformatiert in eine andere Datei schreiben. Zwar kann ich im main() die Datei beschreiben, würde aber einen Teil gerne als Unterfunktion einfügen. Doch ich weiß nicht, wie ich auf den Stream (heißt das so?) vom Unterprogramm aus zugreifen kann. Zeile 83 erzeugt den Fehler. Wäre für einen Tritt sehr dankbar 🙂
Java:
package map2html;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class map2html {

    public static void main(String[] args) {
        boolean S = false;
        boolean E = false;
        String Zeile = "";
        String Ausgabezeile = "";
        String Fehlerort = "";
        String mapStringEnd = args[0].substring(args[0].length()-4);
        String htmlStringEnd = args[1].substring(args[1].length()-5);
        PrintWriter pWriter = null;
        if (mapStringEnd.equals(".map"))
            System.out.println("Map: " + args[0]);
        else
            System.out.println("Aufruf: java map2html GIMP.map FEAT.html");
        if (htmlStringEnd.equals(".html"))
            System.out.println("HTML: " + args[1]);
        else
            System.out.println("Aufruf: java map2html GIMP.map FEAT.html");
       
        Scanner scan = null;
        try {
            scan = new Scanner(new File(args[0]));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
       
        try {
            pWriter = new PrintWriter(new BufferedWriter(new FileWriter(args[1])));
            Kopf_schreiben();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
       
        while (scan.hasNext()) {
            Zeile = scan.nextLine();
            int Start = Zeile.indexOf("coords");
            int Ende = Zeile.indexOf("nohref");
            if (Start != -1 && Ende != -1) {
                Ausgabezeile = Zeile.substring(Start+8,Ende-2).trim();
                S = true;
                E = true;
                Fehlerort = Zeile.substring(Zeile.indexOf("alt")+5,Zeile.length()-3);
            }
                else if (Start != -1 && Ende == -1) {    //coords in Zeile, nohref nicht
                    Ausgabezeile = Zeile.substring(Start+8,Zeile.length()).trim();
                    S = true;
                }
                    else if (Start == -1 && Ende == -1 && S) {    //coords und nohref nicht in Zeile, S aber gesetzt
                        Ausgabezeile = Ausgabezeile + Zeile.substring(0,Zeile.length()).trim();
                    }  
                        else if (Start == -1 && Ende != -1) {    //coords nicht in Zeile, nohref aber schon
                                Ausgabezeile = Ausgabezeile + Zeile.substring(0,Ende-2).trim();
                                E = true;
                                Fehlerort = Zeile.substring(Zeile.indexOf("alt")+5,Zeile.length()-3);
                        }
            if (S && E) {
                System.out.println(Fehlerort + " -> " + Ausgabezeile + "\n");
                pWriter.println(Fehlerort + " -> " + Ausgabezeile);
                S = E = false;
                Ausgabezeile = Fehlerort = "";
            }
        }
        scan.close();
        if (pWriter != null){
            pWriter.flush();
            pWriter.close();
        }

    }
   
    public static void Kopf_schreiben(){
        pWriter.println("Dies ist der Kopf");
    }
}
 
Dann übergibst Du einfach, was Du brauchst. Also wenn Du denn PrintWriter brauchst, dann wird es zu etwas wie:

Java:
    public static void Kopf_schreiben(PrintWriter pWriter){
        pWriter.println("Dies ist der Kopf");
    }
 
Als Anmerkung, es gibt die Java Naming Conventions welche idealerweise eingehalten werden. Zum Beispiel alles was groszgeschrieben ist "MEIN_WERT" wird als Konstante angesehen, wenn es nur ein Buchstabe ist "S" ist es meistens ein generischer Typ (ich persoenlich mag eher sowas wie "VALUE_TYPE", aber da stehe ich relativ alleine). Es bietet sich an die Conventions einzuhalten, weil dann andere Programmierer es sehr viel einfacher haben deinen Code zu lesen.

Desweiteren kuerze Namen nicht nur weil du kannst, es macht deinen Code nur schwerer zu verstehen und zu warten. Perfektes Beispiel ist "S", ich kann nicht sagen was "S" macht obwohl ich den Code ueberflogen habe.
 

Zurück
Oben