powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как проверить является ли данная строка именем файла?
12 сообщений из 12, страница 1 из 1
Как проверить является ли данная строка именем файла?
    #33007848
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ли стандартные механизмы валидации строки на соответсвие правилам нижележащей ОС?
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33007873
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
regexp наверное... а вот правила, скорее всего, самому определять..
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33007883
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передо мной стоит задача создать сохранить данные в файл при этом в имени файла может присутсвовать различный мусор -типа "\n". Мне бы хотелось максимально безболезненно от него избавиться.

Насчет regexp - наверное так и придется. Правда мне нужно не просто казать да или нет - нужно еще и получить из неправильного имени правильное!
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33007907
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неправильные символы известны более-менее. как первое приближение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
   private  String getFileNameFromPath(String path) {
    StringBuffer sb =  new  StringBuffer();
     for  ( int  i =  0 ; i < path.length(); i++) {
       char  c = path.charAt(i);
       if  (isValidChar(c)) {
        sb.append(c);
      }
    }

     return  sb.toString();
  }

...

   private   boolean  isValidChar( char  c) {
     if  (c >= 'A' && c <= 'Z') {
       return  true;
    }
     return  false;
  }
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33008031
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да можно и придеться именно так - фактически получается что для каждой конкретной file system мне нужны свои правила...
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33008490
maddcast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только не file system, а operation system :)
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33008644
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку попробую вспомнить ограничения на файловые имена ОS Windows.

1) Можно использовать латиницу без ограничений. Национальные - только при настроенной локали. В противном случае не гарантируется корректное отображение их в файловых менеджерах и сортировка.

2) Символы " ? ", " * " должны удалятся.

3) Не рекомендуется использовать конструкцию вида "%" {литерал} "%" - она может автоматически заменятся на переменную окружения.

4) Символ ":" в имени файла зарезервирован для NTFS-Streams

5) Символы перенаправления стандартного ввода вывода "<" b ">" "|" использовать нельзя (хотя MSIE успешно сохранял веб-страницы с такими именами).

6) Символы слеша можно использовать как правые так и левые (но не рекомендуется их смешивать). Нельзя их также задваивать. Прочие ошибки связаные со слешами - скорее прикладные чем системные. Пути, которые начинаются с "\\" являются сетевыми. Не всё ПО поддерживает такую нотацию.

7) Значок $ (непомню то-ли в начале то-ли в конце) зарезервирован для NTFS системных областей.

8) Точка и двойная точка - должны фильтроватся в зависимости от условий приложения. Напомню - некоторое количество атак на безопасность веб-серверов основано на использовании символа ".." в пути.

9) Теоретически можно использовать локальные идентификаторы дисков типа
\\?\Volume{бла-бла........}

10) Использовать заререзвированные названия устройств (NULL,COM,LPT) не рекомендуется.
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33010872
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton


большое спасибо!
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33010901
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интресно бы было где нибудь глянуть на regEx pattern для fat'а, ntfs, etc...
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33011009
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maddcast

неа - именно FS
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33011014
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока у меня получилось вот это
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	 private   static  String removeInvalidChars(String str) {
		 final   char [] invalidChars =  new   char [] {'\n', '\r', '…', '
', '
',
									  '?', '*', '%', ':', '<', '>', '|', '$', '\\', '/'};
		
		 final   char [] invalidDubleChars =  new   char [] {'.'};
		
		StringBuffer sb =  new  StringBuffer();
		
		Arrays.sort(invalidChars);
		Arrays.sort(invalidDubleChars);
		 for  ( int  i= 0 ;i<str.length();i++) {
			 if  (Arrays.binarySearch(invalidChars, str.charAt(i))>= 0 )
					 continue ;

			 if  ( (i> 0  && str.charAt(i)==str.charAt(i- 1 )) && Arrays.binarySearch(invalidDubleChars, str.charAt(i))>= 0 )
				 continue ;
			
		
			sb.append(str.charAt(i));
		}	
		 return  sb.toString();
	}
...
Рейтинг: 0 / 0
Как проверить является ли данная строка именем файла?
    #33012032
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri mayton


большое спасибо!

Пожалуйста.

Успехов!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как проверить является ли данная строка именем файла?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]