0

我需要使用 URI 将文件(文件名包含特殊字符)从一个路径复制到另一个路径。但它会引发错误。如果它成功复制,如果文件名不包含特殊字符。您能否告诉我如何使用 URI 将带有特殊字符的文件名从一条路径复制到另一条路径。我已经复制了下面的代码和错误。

代码:-

import java.io.*;
import java.net.URI;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;

public class test {
    private static File file = null;
    public static void main(String[] args) throws InterruptedException, Exception {
        String from = "file:///home/guest/input/3.-^%&.txt";
        String to = "file:///home/guest/output/3.-^%&.txt";
        InputStream in = null;
        OutputStream out = null;
        final ReadableByteChannel inputChannel;
        final WritableByteChannel outputChannel;
        if (from.startsWith("file://")) {
            file = new File(new URI(from));
            in = new FileInputStream(file);
        }

        if (from.startsWith("file://")) {
            file = new File(new URI(to));
            out = new FileOutputStream(file);
        }

        inputChannel = Channels.newChannel(in);
        outputChannel = Channels.newChannel(out);

        test.copy(inputChannel, outputChannel);
        inputChannel.close();
        outputChannel.close();
    }

    public static void copy(ReadableByteChannel in, WritableByteChannel out) throws IOException {
        ByteBuffer buffer = ByteBuffer.allocateDirect(32 * 1024);
        while (in.read(buffer) != -1 || buffer.position() > 0) {
        buffer.flip();
        out.write(buffer);
        buffer.compact();
        }
  }
}

错误: -

Exception in thread "main" java.net.URISyntaxException: Illegal character in path at index 30: file:///home/maria/input/3.-^%&.txt
    at java.net.URI$Parser.fail(URI.java:2829)
    at java.net.URI$Parser.checkChars(URI.java:3002)
    at java.net.URI$Parser.parseHierarchical(URI.java:3086)
    at java.net.URI$Parser.parse(URI.java:3034)
    at java.net.URI.<init>(URI.java:595)
    at com.tnq.fms.test3.main(test3.java:29)
Java Result: 1

感谢您查看这个...

4

2 回答 2

0

您可以尝试使用java.net.uri

于 2013-03-26T17:04:04.663 回答
0

文件名应该是%-escaped。例如,实际文件名中的空格在 URI 中变为 %20。java.net.URI如果您使用带有多个参数的构造函数之一,则该类可以为您完成:

new URI("file", null, "/home/guest/input/3.-^%&.txt", null);

请参阅Java 中的 HTTP URL 地址编码

于 2013-03-26T16:57:29.417 回答