не удается получить файл

#java #file

#java #файл

Вопрос:

Я пытаюсь получить файл, хранящийся в локальной системе, для этого я написал следующий код.

Исходный путь, который я получаю из базы данных, является C:UsersAdminDocumentsBulkmailExcelPath1599203585103000000_4898E400.xlsx .

Если я даю напрямую, это выдает ошибку. Для этого я заменил на \ . Тем не менее, я получаю ту же ошибку.

             String path = individualObject.getAttchmentPath().replace("\", "\\"); 
            System.out.println(path);
            FileSystemResource file = new FileSystemResource(path);



Exception in thread "Timer-0" java.nio.file.InvalidPathException: Trailing char < > at index 499: C:UsersuserDocumentsBulkmailExcelPathattachments1599205942697000000_log4j-application.log                                                                                                                                                                                                                                                                                                                                                                                                                    
    at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:191)
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
    at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
    at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
    at java.io.File.toPath(File.java:2234)
    at org.springframework.core.io.FileSystemResource.<init>(FileSystemResource.java:82)
    at com.util.bulkmailer.service.BulkMailSender.sendSimpleMessage(BulkMailSender.java:54)
    at com.util.bulkmailer.processor.BulkMailProcessor.processor(BulkMailProcessor.java:247)
    at com.kcs.util.bulkmailer.controller.BulkMailerController.sendMail(BulkMailerController.java:109)
    at com.util.bulkmailer.controller.BulkMailerController$1.run(BulkMailerController.java:80)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
  

Если я укажу строку, присутствующую в переменной path, то она сможет выполнить строку и не выдаст никакой ошибки. В чем может быть причина.

Комментарии:

1. «Завершающий символ < > с индексом 499»? Кажется, в конце вашей строки path много ненужных пробелов. Возможно, вам нужно это обрезать.

2. Похоже, в конце имени файла есть ненужные пробелы. Это происходит из одной из этих баз данных с фиксированной шириной записи?

3. Почему вы говорите, что вам нужно заменить косые черты? Я подозреваю, что вам это не нужно, как только вы исправите проблему с пространством.

4. да, просто использование trim() решило мою проблему.

Ответ №1:

Я предполагаю, основываясь на сообщении об ошибке, что путь содержит недопустимый символ пробела в конце. Вы можете использовать объект Path вместо строки, которая будет проверять ваш URI следующим образом Path path = Paths.get(textPath);

Комментарии:

1. Зачем им это делать, он уже проходит проверку, и именно поэтому они получают исключение?

Ответ №2:

У вас есть конечные пробелы в конце вашего пути. Замените вашу первую строку на:

String path = individualObject.getAttchmentPath().replace("\", "\\").trim();