2016-05-30 4 views
-1

Ich habe ein Problem beim Analysieren von Argumenten. Ich habe ein Schreibverfahren, das in WriteToFile Klasse ist wie folgt:Wie parsen Sie Argumente in einer anderen Klasse?

public class WriteToFile { 

    public void write (String text){ 
     try{ 
      FileWriter writer = new FileWriter("output.txt",true); 
      BufferedWriter write = new BufferedWriter(writer); 

      write.write(text); 
      write.newLine(); 
      write.close(); 
     } 
     catch (Exception error){ 
      error.printStackTrace(); 
     } 
    } 

public class A { 

    WriteToFile write = new WriteToFile(); 
    write.write(something); 

} 

public class B { 

    WriteToFile write = new WriteToFile(); 
    write.write(something); 

} 

Wir brauchen zu ändern "output.txt" zu args [1]. Normalerweise fügt man der Methode ein weiteres Argument hinzu, erlaubt aber nur 3 Zeilencodeänderungen. Ich habe versucht, eine set-Methode hinzuzufügen, aber schreibe die Methode, die von mehreren Klassen verwendet wird, so dass es mehr als 3 Zeilen braucht, um es zu beheben. Ich habe versucht, Hauptklasse zu erweitern, um in den Bereich zu kommen, hat nicht funktioniert. Gibt es einen Weg, es zu tun?

+1

Was meinst du mit "aber erlaubte nur 3 Zeilen Code-Änderungen"? –

+0

'aber erlaubt nur 3 Zeilencodeänderungen 'warum ist es so? –

+1

fügt es als ein zusätzlicher Parameter hinzu, ändert 'output.txt' in den Parameter und übergibt einen zusätzlichen Parameter von der Hauptsache wie 3 Zeilen Code für mich – SomeJavaGuy

Antwort

1

1) schaffen neue öffentliche Feld in der WriteToFile Klasse (filename)

2) aus dem Haupt myWriter.fileName = args[1]

3) FileWriter writer = new FileWriter(fileName, true);

// keine Änderung der Methodensignatur genannt 100mal

bearbeiten

Wenn Sie viele Instanzen von WriteToFile ganzen Ort bauen, dann ein statisches Feld

1) in Main verwenden In Mainpublic static String fileName;

2) aus dem Haupt Main.fileName = args[1]

3) FileWriter writer = new FileWriter(Main.fileName, true);

+0

Ja, aber viele Klassen verwenden diese Methode und andere Klassen außer Main, ich kann Args [1] Variable nicht zugreifen. Liege ich falsch? –

+0

@ Emredağıstan Der Wert für fileName wird am Anfang des Programms in 'main' mit args [1] gesetzt. Wenn Sie viele Instanzen von 'WriteToFile' überall erstellen, sollten Sie diese Variable in einem statischen Feld in' Main' behalten. –

+0

Sinnvoll. Vielen Dank. –

1
public void write (String text, String filename) // 1 
{ 
    FileWriter writer = new FileWriter(filename,true); // 2 
    ... 

In Ihrem Haupt, tun dies während des Anrufs.

new WriteToFile().write(text, args[1]); // 3 

Dies sind genau 3 Zeilenwechsel wie durch Kommentare angezeigt.

4

einen Parameter hinzufügen und verwenden es, wenn Sie die Methode aufrufen, nur drei Änderungen übernehmen würde:

// Change 1 - add a fileName parameter to the method 
public void write (String text, String fileName) { 
    try{ 
     FileWriter writer = new FileWriter(fileName, true); // Change 2 - use it 
     BufferedWriter write = new BufferedWriter(writer); 

     write.write(text); 
     write.newLine(); 
     write.close(); 
    } 
    catch (Exception error){ 
     error.printStackTrace(); 
    } 
} 

// Change 3 - in the main method that calls this one, pass args[1]: 
myWriter.write("someText", args[1]); 
+0

Was ist, wenn wir diese Methode in 1500 Zeilen bereits 100 Mal aufgerufen haben? –

+0

@ Emredağıstan Können Sie Ihre Methode teilen, diese zu nennen? Ich fürchte, wir brauchen etwas mehr Kontext, um Ihnen bei diesem Problem zu helfen. – Mureinik

+0

@ Emredağıstan Wenn das Anrufen mehrere Male das Problem ist, warum nicht einfach Suchen und Ersetzen verwenden? –

Verwandte Themen