获取FileWriter用Java编写的文件

时间:2016-12-03 11:04:44

标签: java file

有没有办法可以在FileWirter的情况下获取正在编写的文件。我没有任何对File对象的引用。

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

如何获取在这种情况下创建的文件。我只会在编写器关闭后访问该文件。但我不想保留所有创建文件的单独列表。什么是最好的方式。

3 个答案:

答案 0 :(得分: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 */
}

答案 1 :(得分: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

答案 2 :(得分:-1)

根据official document,无法检索File对象。 FileWriter也无法做到这一点。但是,通过从不同的角度看待问题,您可能会出现这样的情况(假设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
}