У меня есть следующая схема в моем дизайне:
Класс вызывает "класс step1".В классе step1 я принимаю загрузку файлов.Затем, позже, вызывающий класс вызывает некоторые другие классы, и в конце этих шагов я хотел бы сохранить файл, загруженный на первом шаге.
Вот код:
public final class Caller{
// Upload file page
private FirstClassInfo firstClassInfo = new FirstClassInfo();
// ... other private members and methods
public void someMethodCallsThoseClasses(){
new FirstClass(firstclassInfo);
// other classes
}
public void allClassesCompleted(){
// When all of the steps are completed, this will be executed
// I would like to write uploaded file to the disk here
File targetFile = new File(FirstClass.uploadLocation + firstclassInfo.getDiskName());
java.nio.file.Files.copy(
firstclassInfo.getStream(),
targetFile.toPath(),
StandardCopyOption.REPLACE_EXISTING);
// It gives me File upload exception: java.io.IOException: Stream Closed
}
}
Вот FirstClass:
public class FirstClass {
public static final String uploadLocation = "PATH TO FILE!";
private FirstClassInfo firstclassInfo;
private UploadFinishedHandler uploadFinishedHandler;
public FirstClass (FirstClassInfo firstclassInfo){
this.firstclassInfo= firstclassInfo;
}
// ... other methods
// File upload method
private void uploadFinish() {
uploadFinishedHandler = (InputStream stream, String fileName, String mimeType, long length, int filesLeftInQueue) -> {
// ... some methods
firstclassInfo.setStream(stream);
// ... some methods
};
}
}
А вот FirstClassInfo:
public class FirstClassInfo{
// ... other private members
private String diskName;
private InputStream stream;
// getters and setters are below. Default getters and setters
}
Я не могу получить доступ к объекту потока внутри FirstClassInfo, потому что поток закрывается один раззагрузка завершена.Однако я хотел бы получить данные и записать их в файл на последнем шаге, в методе allClassesCompleted
.Какова стратегия, которой я должен следовать?