2013-03-26 1 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

Не уверен, но вы можете попробовать кодировать имя файла! –

ответ

0

Имена файлов должны быть %-escaped. Например, пространство в фактическом имени файла становится% 20 в URI. java.net.URI класс может сделать это для вас, если вы используете один из конструкторов с несколькими аргументами:

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

См HTTP URL Address Encoding in Java.

+0

Спасибо, его работа. Не могли бы вы посоветовать мне, почему приведенный ниже код не работает. file = new File (новый URI (файл: ///home/maria/input/3.-^%&.txt)) – user2040497

+0

'^' и '%' являются специальными символами, им нужно экранировать. '^' как '% 5E' и'% 'как'% 25'. См. Статью Википедии, которую я цитировал. –

 Смежные вопросы

  • Нет связанных вопросов^_^