Записать поток в объект Java, а затем использовать его для записи в файл - PullRequest
0 голосов
/ 18 марта 2019

У меня есть следующая схема в моем дизайне:

Класс вызывает "класс 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.Какова стратегия, которой я должен следовать?

...