あるパッケージから別のパッケージにクラスパスリソースをコピーする必要があります。スレッド "main"の例外java.nio.file.InvalidPathException:不正な文字<:>インデックス2:
私のプログラムは次のとおりです。私は例外を取得
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);
}
方法Files.copy
時:
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)
はどのようにそれを解決するために?パッケージcom/stackoverflow/main
から
ソリューション
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);
}
このコードは正しくコピーMovie.class
com/stackoverflow/json
に。
クラスパスが 'jar'のような**透過的なリソースと**不透明な**リソースで構成されているため、これは動作しません。あなたは 'jar:file:/ com/stackoverflow/json'のようなパスに書き込もうとしています。これは無効な' Path'や 'File'で有効なURIです。一般的に、クラスパスには書き込むことができず、クラスパスからの読み取りだけができます。 –
プロジェクトが作成されていません –
Mavenプロジェクトをコンパイルすると、jarファイルが生成されます。コンパイルされたコードを他にどのように配布しますか? (Pre Java 9) –