有没有办法可以在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");
}
}
如何获取在这种情况下创建的文件。我只会在编写器关闭后访问该文件。但我不想保留所有创建文件的单独列表。什么是最好的方式。
答案 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
}