2016-12-03 8 views
1

FileWirterの場合に書き込まれるファイルを取得する方法はありますか?私はFileオブジェクトへの参照を私と一緒に持っていません。JavaでFileWriterによって書かれたファイルを取得します

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"); 
    } 
} 

この場合に作成されたファイルはどのように取得できますか。私はライターが閉じられた後にのみファイルにアクセスします。しかし、私は作成されたすべてのファイルのリストを別に保存したくありません。何が最善の方法です。あなたはスーパーの呼び出し前にファイルを取得することはできませんので

+0

一時ファイルを作成するためにスーパーコンストラクタを使用する必要がありますか? –

+0

私はJobResponseWriterをFileWriterとして動作させる必要があります。他の方法があれば教えてください。 – Ysak

+0

これは「継承を継承する」の標準的な問題です。 'File'メンバ変数を作成し、Filewriterクラスを直接シミュレートしてください。 –

答えて

2

あなただけへの参照を保存する必要がありますファイル:

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

ああ、ええ。その方法について考えていなかった –

+0

これは正確に私が実装したものです...基本的に私が取り出したファイル作成ロジック... – Ysak

1

Initialize field before super constructor runs?

あなたはあなたがいっぱいにしたい場合は、これらのインタフェースを実装する必要があり、この

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() 
} 

ような何かを試みることができますファイルライターのようなオブジェクトの機能

Closeable, Flushable, Appendable, AutoCloseable

-1

official documentによれば、Fileオブジェクトを検索する方法はありません。また、FileWriterでは不可能です。しかし、別の視点からproblmを見て、あなたは(Jobがあなたのクラスであると仮定すると、そうでない場合は、Jobから拡張することができます。)このように出てくることがあります。

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

ええと...お待ちください。私はC++と混同していると思う。可能性はそうではありませんが、メソッド ''の中にあります。私はそれを確認した後に戻ってきます。 – minary

+0

これはJavaでの解決策ではありません – Ysak

+0

@Ysakだからコードを編集しました。私はこの問題を別の観点から見た。そして、間違いなく動作するはずです。 – minary

関連する問題