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引数を持つコンストラクターの 1 つを使用する場合、クラスはそれを行うことができます。

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

Java での HTTP URL アドレス エンコーディング を参照してください。

于 2013-03-26T16:57:29.417 に答える