2011-12-15 2 views
1

Я пытаюсь перечислить количество файлов в каталоге. Но я не могу это сделать, и я подозреваю, что он имеет отношение к пробелу в именах родительских каталогов.
Что я делаю это через .properties файл я установил значение, как -Файловый объект с пробелом в имени каталога

dir.loc=H:/Main/dir one/dir - two/dir3/dir four 
dir.name=Run 

Сейчас в файле Jave я установить значение переменных Струнные, как -

String s1 = properties.getProperty("dir.loc"); 
String s2 = properties.getProperty("dir.name"); 

создать файл объект, как -

File f = new File(s1, s2); 
File[] fList = f.listFiles(); 

в настоящее время здесь fList является null;
Привод H находится на другом удаленном компьютере, и я считаю, что программа java пытается локально локализовать локацию «Запустить», а не находить ее на диске H, и потому что она не находит «Запустить» возврат списка null.

Когда я попытался в простом классе Java, как -

File f = new File("H:/Main/dir one/dir - two/dir3/dir four", "Run"); 

тогда я получаю результат с f.listFiles().length;

Так что я думаю, что, возможно, придется сделать что-то с извлечением значения из файла свойств и присваивая его переменной String.

Правильно ли в моем предположении?
Что может быть возможным решением этой проблемы?

+0

Как вы загружаете свойства и каково значение 'new File (s1, s2) .getAbsolutePath()'? –

+0

Это то, что получает отпечатки для 'getAbsolutePath()' as 'H: \ Main \ dir one \ dir - two \ dir3 \ dir four \ Run', и я загружаю файл свойств просто как 'properties.load (Thread. currentThread) .getContextClassLoader(). getResourceAsStream ("Test.properties")); ' –

+0

ну, это ничем не отличается от вашего« прямого »примера, что странно. Повторно проверьте права доступа на диск «H»; Кроме того, вы можете попробовать установить UNC-путь (в виде '\\ machine \ share \ target'). –

ответ

1

Хорошо, я нашел решение для своей проблемы, довольно просто.
я следующее -

В свойствах файла -

dir.loc=H:/Main/dir one/dir - two/dir3/dir four/Run 

В конфигурации Java файл -

String s1 = properties.getProperty("dir.loc"); 

В моей Java программы -

File tempF = new File(s1); 
File dirLoc = new File(tempF.getAbsolutePath()); 

dirLoc.listFiles().length; выдает число.

Комментарий от @barti_ddu о getAbsolutePath() заставил меня задуматься о том, может ли это использовать.
Что-то не так с этим решением или не совсем прилично?

Спасибо всем.

2

Да, вы правы. Значения прикручиваются при чтении их из файла свойств. ли это вместо:

dir.loc="H:/Main/dir one/dir - two/dir3/dir four" 
+0

Извините, не работает. Я пытаюсь различными способами обойти это. с побегом и т. д., пока еще нет успеха. Но когда я использую «как вы сказали», а затем, когда я sysout «f.getName()», результат «Run» « –

+0

@ Swift-Tuttle не уверен, что я понимаю ваш комментарий, что вы подразумеваете под« не Работа"? Если вы выполняете 'System.out.println (dir.loc)', он отображает правильное значение? – GETah

+0

Ну, если я sysout 'dir.loc' o/p is' "H:/Main/dir one/dir - two/dir3/dir four" '. Поэтому для создания файлового объекта я передаю переменную String, содержащую это как первый аргумент, и переменную String, содержащую Run. Затем 'getAbsolutePath()' приходит как 'c: \ Program Files \ eclipse \" H: \ Main \ dir one \ dir - two \ dir3 \ dir four "\ Run' и' getName() 'as Run –

0

Похоже, вам просто нужно обрезать значение ваших свойств. В коде вы изображенном

dir.loc=H:/Main/dir one/dir - two/dir3/dir four 

имеет конечные пробелы.

ли это:

String s1 = properties.getProperty("dir.loc").trim(); 
String s2 = properties.getProperty("dir.name").trim(); 

это исправить?

+0

Очень жаль , его просто опечатка здесь, но фактическое значение не содержит никаких конечных пробелов. –

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