от
Я пытаюсь скопировать файл из внешней папки в локальную папку в папке проекта Java. Проблема в том, что я не хочу вставлять точный URL-адрес локальной папки назначения, поскольку он может не работать, если проект перемещен в другое место. Итак, есть ли способ получить папку назначения по коду (автоматически даже при перемещении)? Это функция, которую я использовал для копирования
private static void copyToUpload(File source,String name) throws IOException {           
    String tail = source.getName().substring(source.getName().lastIndexOf("."));              
    Files.copy(source.toPath(), (new File("src/" name tail)).toPath(), StandardCopyOption.REPLACE_EXISTING);
}
Называется:
> protected void doPost(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
>         File src = new File(request.getParameter("selectedFile"));
>         copyToUpload(src, "hello"); }
Ожидаемое:
src: C:\\..\test.jpg
des: C:\\Test\src\test.jpg
Актуально:
NoSuchFileException
Трассировки стека:
>    java.nio.file.NoSuchFileException:
> C:\Users\Admin\Downloads\60788720_1251034635090935_8981200640877264896_n.jpg
> 
    

        

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

2 Ответы

0 голосов
от
Просто поместите ваши файлы в папку src / main / resources Вы можете получить свой файл, используя ClassLoader.getResource:
String resource = ClassLoader.getSystemClassLoader().getResource("test.jpg").getFile();
        File test = new File(resource);
    
0 голосов
от
Я попытался запустить этот код (он имеет похожую логику). Это работает. Я предлагаю проверить, существуют ли файлы.
public class CopyFilesTest {
    private static Logger logger = LoggerFactory.getLogger(CopyFilesTest.class);

    private static Path sourceFile;
    private static Path destinationFile;

    @BeforeClass
    public static void prepareResources() {
        sourceFile = new File("src/test/resources/testFile.txt").toPath();
        destinationFile = new File("src/test/resources/testFile_copy.txt").toPath();
    }

    @Test
    public void givenExistingFile_expectCopiedFile() {
        Assert.assertTrue(sourceFile.toFile().exists());
        logger.info(String.format("Source file %s exists.\n", sourceFile.getFileName()));

        if (destinationFile.toFile().exists()) {
            logger.info(String.format("Destination file %s exists.\n", destinationFile.getFileName()));

        } else {
            logger.info(String.format("Destination file %s does not exist.\n", destinationFile.getFileName()));

        }

        logger.info("Copying file.");

        Path createdFile = null;
        try {
            createdFile = Files.copy(sourceFile, destinationFile, StandardCopyOption.REPLACE_EXISTING);

        } catch (IOException e) {
            logger.warn("Failed copying files.");

        }

        Assert.assertNotNull(createdFile);
        Assert.assertEquals(destinationFile.toAbsolutePath().toString(), createdFile.toAbsolutePath().toString());
        logger.info("Files successfully copied.");
    }
}
Журнал от первого запуска, где целевой файл не существует:
[main] INFO org.stackoverflow.copyfiles.CopyFilesTest 

И журнал со второго запуска, где файл существует с первого запуска:

[main] INFO org.stackoverflow.copyfiles.CopyFilesTest 
    
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...