2016-12-03 43 views
1

有没有一种方法可以在FileWirter的情况下获取正在写入的文件。我没有任何对File对象的引用。获取FileWriter在Java中写入的文件

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'成员变量和直接扩展它 –

回答

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

这到底是什么,我有我implemented..basically已取出文件的创建逻辑... – 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