2013-03-26 75 views
0

复制我需要从一个路径复制文件(文件名中包含特殊字符),使用URI另一条路径。但它会抛出一个错误。如果它成功复制,如果文件名不包含特殊字符。你能否告诉我如何使用特定字符的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 

感谢您寻找到这...

+0

不确定,但你可以尝试编码的文件名! – 2013-03-26 16:53:02

回答

0

的文件名应该是%-escaped。例如,实际文件名中的空格变为URI中的%20。

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

HTTP URL Address Encoding in Java:如果你使用一个构造函数与几个参数的java.net.URI类可以为你做到这一点。

+0

感谢它的工作。你能告诉我为什么下面的代码不工作。 file = new File(new URI(file:///home/maria/input/3.-^%&.txt)) – user2040497 2013-03-26 18:09:44

+0

'^'和'%'是特殊字符,它们需要转义。作为'%5E'的'^'和'%25'的'%'。请参阅我引用的维基百科文章。 – 2013-03-26 20:29:49