I have to copy classpath resource from one package to another.

My program is:

public static void main(String[] args) throws IOException, URISyntaxException {

ClassLoader classLoader = CopyFileToDirectoryTest.class.getClassLoader();

InputStream in = classLoader.getResourceAsStream("com/stackoverflow/main/Movie.class");

URI uri = ClassLoader.getSystemResource("com/stackoverflow/json").toURI();

Path path = Paths.get(uri.getPath(),"Movie.class");

System.out.println(path);

long copy = Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING);

System.out.println(copy);

}

At Files.copy method I get exception:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <:> at index 2: /D:/Programs/workspaceEE/HibernateDemo/target/classes/com/stackoverflow/json

at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)

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.nio.file.Paths.get(Paths.java:84)

at com.stackoverflow.main.CopyFileToDirectoryTest.main(CopyFileToDirectoryTest.java:34)

How to solve it?

Solution

public static void main(String[] args) throws IOException, URISyntaxException {

ClassLoader classLoader = CopyFileToDirectoryTest.class.getClassLoader();

InputStream in = classLoader.getResourceAsStream("com//stackoverflow//main//Movie.class");

URI uri = ClassLoader.getSystemResource("com//stackoverflow//json").toURI();

String mainPath = Paths.get(uri).toString();

Path path = Paths.get(mainPath, "Movie.class");

System.out.println(path);

long copy = Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING);

System.out.println(copy);

}

This code correctly copies Movie.class from package com/stackoverflow/main into com/stackoverflow/json.

解决方案

problem is that Paths.get() doesnt expect that kind of value which is generated from uri.getPath().

Solution:

URI uri = ClassLoader.getSystemResource("com/stackoverflow/json").toURI();

String mainPath = Paths.get(uri).toString();

Path path = Paths.get(mainPath ,"Movie.class");

Logo

一站式 AI 云服务平台

更多推荐