2016-12-03 4 views
1

Gibt es eine Möglichkeit, dass ich die Datei, die im Falle von FileWirter geschrieben wird, abrufen kann. Ich habe keinen Bezug auf das File-Objekt mit mir.Erhalte die Datei, die von FileWriter in Java geschrieben wird

public class JobResponseWriter extends FileWriter{ 
    public JobResponseWriter(Job job) throws IOException { 
     super(File.createTempFile("JobResponse" + job.getId() ,"tmp")); 
    } 

    public void writeLn(String str) throws IOException { 
     super.write(str + "\n"); 
    } 
} 

Wie bekomme ich die Datei, die in diesem Fall erstellt wurde. Ich werde auf die Datei nur zugreifen, nachdem der Schreiber geschlossen ist .. Aber ich möchte nicht eine separate Liste aller erstellten Dateien behalten. Was ist der beste Weg?

+0

Müssen Sie den Superkonstruktor verwenden, um die temporäre Datei zu erstellen? –

+0

Ich brauche den JobResponseWriter, um sich wie ein FileWriter zu verhalten, Wenn Sie einen anderen Weg haben..to, lassen Sie mich wissen – Ysak

+0

Dies ist ein Standard-Problem von "Zusammensetzung über Vererbung". Sie sollten eine 'File'-Membervariable machen und die Filewriter-Klasse" simulieren "anstatt sie direkt zu erweitern. –

Antwort

2

Sie müssen nur einen Verweis auf die sparen Datei:

public class JobResponseWriter extends FileWriter{ 
    private final File myFile; 
    public JobResponseWriter(Job job) throws IOException { 
     this(File.createTempFile("JobResponse" + job.getId() ,"tmp")); 
    } 
    public JobResponseWriter(File f) throws IOException { 
     super(f); 
     myFile = f; 
    } 
    /* your code here */ 
} 
+0

Ah, ja. Ich habe nicht darüber nachgedacht –

+0

Das ist genau was ich implementiert habe..baslich die Dateierstellungslogik, die ich herausgenommen habe ... – Ysak

1

Da Sie die Datei nicht vor dem Super-Anruf bekommen

Initialize field before super constructor runs?

Sie könnten versuchen, etwas wie dieses

public class JobResponseWriter { 

    private final File f; 
    private final fw; 

    public JobResponseWriter(Job job) throws IOException { 
     this.f = File.createTempFile("JobResponse" + job.getId() ,"tmp")); 
     this.fw = new FileWriter(f); 
    } 

    public void writeLn(String str) throws IOException { 
     fw.write(str + "\n"); 
    } 

    // public void getFile() 
} 

Sie können diese Schnittstellen implementieren möchten, wenn Sie die volle wollen Funktionalität eines Dateischreiber-ähnlichen Objekts

Closeable, Flushable, Appendable, AutoCloseable

-1

Gemäß official document gibt es keine Möglichkeit, das Objekt File erneut abzurufen. Und es ist auch nicht möglich mit FileWriter. Wenn jedoch die problm aus einer anderen Perspektive zu sehen, du so kommen kann (Job Unter der Annahme, ist die Klasse Sie können von Job verlängern, wenn es nicht ist.):

public class JobResponseWriter extends FileWriter{ 
    File jobResponse = null; 
    public FileWriter getJobResponseWriter() { 
     if(jobResponse == null) 
      jobResponse = File.createTempFile("JobResponse" + getId() ,"tmp")); 
     return new FileWriter(jobResponse, true); //Open in append mode 
    } 

    public File getJobResponseFile() { 
     if(jobResponse == null) 
      jobResponse = File.createTempFile("JobResponse" + getId() ,"tmp")); 
     return jobResponse; 
    } 

    //And the original methods here 
} 
+0

Ähm ... Warte. Ich glaube, ich war mit C++ verwirrt. Möglicherweise nicht so, aber innerhalb der Methode ''. Ich werde zurückkommen, nachdem ich es überprüft habe. – minary

+0

Dies ist keine Lösung in Java – Ysak

+0

@ Ysak Also habe ich den Code bearbeitet. Ich sah das Problem aus einer anderen Perspektive. Und es sollte definitiv funktionieren. – minary

Verwandte Themen