Запись имени файла с пробелом в HDFS с использованием Java URI.create приводит к сбою с помощью IllegalArgumentException

#java #hadoop #hdfs #illegalargumentexception

#java #hadoop #hdfs #illegalargumentexception

Вопрос:

Я пытаюсь выполнить следующий фрагмент, чтобы сохранить файл в HDFS.

 Configuration conf = new Configuration();
String targetFileStr = "/someDirectory/fileWith Space.txt"
FileSystem fs = FileSystem.get(URI.create(targetFileStr), conf);
Path path = new Path(targetFileStr);
  

Но это сбой с:

 java.lang.IllegalArgumentException: Illegal character in path at index 26
at java.net.URI.create(URI.java:852)
  

Я хочу сохранить пробел в filename .

Комментарии:

1. Можете ли вы попробовать закодировать имя файла?

2. @NileshPS Я попытался закодировать его с помощью java.net . URLEncoder и пробел заменяются знаком . Но меня беспокоит то, что при сохранении файла в HDFS он сохранится с или с пробелом.

Ответ №1:

В индексе есть недопустимый символ 26 , то есть ему не нравится пробел в пути. Вы можете в процентах кодировать специальные символы, такие как пробелы. В этом случае замените его на a .

 String targetFileStr = "/someDirectory/fileWith Space.txt"
targetFileStr = targetFileStr.replaceAll(" "," ");
  

Вы также можете использовать URLEncoder:

 String targetFileStr = "/someDirectory/fileWith Space.txt"
targetFileStr = URLEncoder.encode(targetFileStr, "UTF-8");