Сохранение файла по несуществующему пути в Java

Я создаю простое клиент-серверное приложение, которое позволяет серверу получать файл от клиента. В этом приложении клиент также может решить, где хранить файл в файловой системе сервера, если он находится внутри заданного базового пути.

Проблема в том, что если клиент отправляет путь, сервер создает, т.е. эту строку как путь: C:\basePath\newFolder\file.xml. Если newFolder не существует в текущей файловой системе, выдается эта ошибка:

Error: C:\remtServer\prova\t.xml (Access denied)

А также эти две ошибки, но я думаю, что они неуместны, потому что они происходят от первой:

[Fatal Error] :1:8: XML document structures must start and end within the same entity.
Error: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; XML document structures must start and end within the same entity.

Я не очень разбираюсь в Java, поэтому, может быть, это тривиальный вопрос, но я не могу понять.

Это код на сервере:

public static void receive(String token, String fileName, String filePath, int length) throws IOException{

        // Stream for binary data and file transfer
        OutputStream out = new FileOutputStream(basePath + filePath + fileName);
        InputStream in = socket.getInputStream();

        // Variables 
        int bytesRead;

        // Bytes for store info to be sent
        byte[] buffer = new byte[length];

        //-------------------------
        // Send file 
        //------------------------- 

        while((bytesRead = in.read(buffer)) > 0){
            out.write(buffer, 0, bytesRead);

            if (bytesRead < 1024) {
                break;
            }

        } // while

        //-------------------------
        // End of file transfer
        //-------------------------
        

        out.close();
    } // receive

Ошибка возникает из-за того, что каталог не существует. Как я могу создать каталог, чтобы исправить это? Иначе как я могу это решить?

new File(basePath + filePath).mkdirs() создаст недостающие каталоги из этого пути.
Arnaud 05.05.2022 15:45

Или Files.createDirectories(Path.of(fileName).getParent());

Shawn 05.05.2022 16:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На стороне сервера следующий код создает все каталоги (при условии, что Java, работающая на стороне сервера, имеет необходимые права доступа к файлам)

File f = ...; // The file path the client has submitted
File dir = null;
if (f.isFile()) {
  dir = f.getParentFile();
} else dir = f;
dir.mkdirs();

Другие вопросы по теме