Как я могу получить URL-адрес локальной папки, которая находится внутри папки проекта Java - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь скопировать файл из внешней папки в локальную папку в папке проекта 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
> -> src\hello.jpg
>       sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
>       sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
>       sun.nio.fs.WindowsFileCopy.copy(WindowsFileCopy.java:205)
>       sun.nio.fs.WindowsFileSystemProvider.copy(WindowsFileSystemProvider.java:278)
>       java.nio.file.Files.copy(Files.java:1274)
>       controller.upload.copyToUpload(upload.java:30)
>       controller.upload.doPost(upload.java:78)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
>       org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

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

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 - Source file testFile.txt exists.

[main] INFO org.stackoverflow.copyfiles.CopyFilesTest - Destination file testFile_copy.txt does not exist.

[main] INFO org.stackoverflow.copyfiles.CopyFilesTest - Copying file.
[main] INFO org.stackoverflow.copyfiles.CopyFilesTest - Files successfully copied.

Process finished with exit code 0

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

[main] INFO org.stackoverflow.copyfiles.CopyFilesTest - Source file testFile.txt exists.

[main] INFO org.stackoverflow.copyfiles.CopyFilesTest - Destination file testFile_copy.txt exists.

[main] INFO org.stackoverflow.copyfiles.CopyFilesTest - Copying file.
[main] INFO org.stackoverflow.copyfiles.CopyFilesTest - Files successfully copied.

Process finished with exit code 0
0 голосов
/ 04 июля 2019

Просто поместите ваши файлы в папку src / main / resources

Вы можете получить свой файл, используя ClassLoader.getResource :

String resource = ClassLoader.getSystemClassLoader().getResource("test.jpg").getFile();
        File test = new File(resource);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...