Здравствуйте, Аноним, Вы писали:
А>Как проще всего получить имя файла без расширения? А>Могут быть две ситуации А>1. Файл имеет расширение. А>2. Файл не имеет расширения.
Расширение это всего лишь условная часть имени файла. Поэтому File.getName и String.lastIndexOf и т.п.
Здравствуйте, <Аноним>, Вы писали:
А>Как проще всего получить имя файла без расширения? А>Могут быть две ситуации А>1. Файл имеет расширение. А>2. Файл не имеет расширения.
А>Как проще всего это обрабатывать?
String[] arr = fileName.split(".");
if (arr.length=1){
//Значит нет расширения
} else {
//Последний элемент нафик все остальное в кучку
}
Здравствуйте, bolshik, Вы писали:
VG>>И еще не забыть про ситуацию, когда файл начинается с '.'
Расширение вообще имеет смысл чисто нотационный. Если файл имет в нуле точку, то не факт, что он вообще имеет «имя без расширения».
Но можно для этой ситуации сравнивать не как != -1, а как > 0.
B>lastIndexOf() != indexOf()
Здравствуйте, aefimov, Вы писали:
A>Здравствуйте, bolshik, Вы писали:
VG>>>И еще не забыть про ситуацию, когда файл начинается с '.'
A>Расширение вообще имеет смысл чисто нотационный. Если файл имет в нуле точку, то не факт, что он вообще имеет «имя без расширения». A>Но можно для этой ситуации сравнивать не как != -1, а как > 0.
B>>lastIndexOf() != indexOf()
A>Это не верно.
Это уже скорее в философию надо идти или в алгоритмы ибо спор вечен и договоренность должна быть:
1) Никто ни разу не сказал про то что это ТОЛЬКО имя файла а не вся домовая книга включая путь
2) Нужна четкая договоренность что то что после последней точки ВСЕГДА являтеся расширением а не очередным.словом.в.ненормальном.имени.файла_без.расширения
Здравствуйте, Сэма, Вы писали:
С>Здравствуйте, aefimov, Вы писали: A>>Расширение вообще имеет смысл чисто нотационный. Если файл имет в нуле точку, то не факт, что он вообще имеет «имя без расширения». A>>Но можно для этой ситуации сравнивать не как != -1, а как > 0. С>Это уже скорее в философию надо идти или в алгоритмы ибо спор вечен и договоренность должна быть: С>1) Никто ни разу не сказал про то что это ТОЛЬКО имя файла а не вся домовая книга включая путь С>2) Нужна четкая договоренность что то что после последней точки ВСЕГДА являтеся расширением а не очередным.словом.в.ненормальном.имени.файла_без.расширения
А почему "очередным.словом.в.ненормальном.имени.файла_без.расширения"? Достаточно понимать, что java — это кросплатформенная система, а следовательно предполагать о:
1. Наличии диска С в пути
2. Наличии расширения
3. Регистронезависимости
— категорически не стоит.
Здравствуйте, Сэма, Вы писали:
А>>Как проще всего это обрабатывать? С>
С>String[] arr = fileName.split(".");
С>if (arr.length=1){
С>//Значит нет расширения
С>} else {
С>//Последний элемент нафик все остальное в кучку
С>}
С>
только split(...) использует регулярные выражения. так работать не будет.
следовало бы split("\\.")
Здравствуйте, aefimov, Вы писали:
A>Оно не тормозит, кстати? A>Если вам в IDE надо отрисовать иконки на файлах проекта и разбросать их по типам? А файлов, гдето под 20000?
Что прям все 20000 в одном tree? , а не правильнее ли lazy tree + cache? Зато никакой привязки. Ибо меня вот например бесит idea тем, что у нее все на расширения подвязано и сделать что-то более умное (например отличать spring xml от просто xml) невозможно.
Здравствуйте, aka50, Вы писали: A>>Если вам в IDE надо отрисовать иконки на файлах проекта и разбросать их по типам? А файлов, гдето под 20000? A>Что прям все 20000 в одном tree? , а не правильнее ли lazy tree + cache? Зато никакой привязки. Ибо меня вот например бесит idea тем, что у нее все на расширения подвязано и сделать что-то более умное (например отличать spring xml от просто xml) невозможно.
Ну вобщето возможно. Но без полного парсинга не обойтись же всеравно. А фулскан дерева нужен, чтобы в рефакторингах не пропустить ничего. Ну и в лукапах.
Re[2]: Как получить имя файла без расширения?
От:
Аноним
Дата:
24.05.07 12:17
Оценка:
А>А можна узнать зачем такое нужно? А>Может Вы просто выбрали не правильное направление в решении вашей задачи?
Затем что есть несколько файлов с одинаковым именем, но с разными расширениями.
А читать в определенный момент надо только файл с нужным расширением.
Здравствуйте, aefimov, Вы писали:
A>Ну вобщето возможно. Но без полного парсинга не обойтись же всеравно. А фулскан дерева нужен, чтобы в рефакторингах не пропустить ничего. Ну и в лукапах.
Так ведь все равно psi строится... так какая разница тогда какое расширение, ведь существует точное отображение psielement <- file, и выходит что расширение только с толку сбивает. А так все просто, появился новый файл, его отсканили (при чем точно определили тип, не просто .doc, а именно MSOffice 6.0 Document) и сохранили в кеш. А если исходить из просто расширения, то .doc может быть чем угодно (и просто текст, и MSO и вообще что-то невообразимое).
Здравствуйте, aka50, Вы писали:
A>Так ведь все равно psi строится... так какая разница тогда какое расширение, ведь существует точное отображение psielement <- file, и выходит что расширение только с толку сбивает. А так все просто, появился новый файл, его отсканили (при чем точно определили тип, не просто .doc, а именно MSOffice 6.0 Document) и сохранили в кеш. А если исходить из просто расширения, то .doc может быть чем угодно (и просто текст, и MSO и вообще что-то невообразимое).
Хотя с другой стороны, отличить файл допустим .scala от .java достаточно сложно (если не невомзможно), по этому имхо лучший вариант mime + extension.
Здравствуйте, aka50, Вы писали:
A>Так ведь все равно psi строится... так какая разница тогда какое расширение, ведь существует точное отображение psielement <- file, и выходит что расширение только с толку сбивает. А так все просто, появился новый файл, его отсканили (при чем точно определили тип, не просто .doc, а именно MSOffice 6.0 Document) и сохранили в кеш. А если исходить из просто расширения, то .doc может быть чем угодно (и просто текст, и MSO и вообще что-то невообразимое).
Вы предлагаете взять N PSI парсеров ,прогнать через них X файлов и полученное PSI дерево (еще надо выбрать какое их них лучше) сохраняем в кешах и рисуем иконку в зависимости от типа PsiFile?
Оно умрет Надо как то быстро раскидать файлы для парсеров. Т.е. быстро установить соответствие между файлом и его парсером. Сейчас это делает патернами по имени файла. Вероятно делать первых N байт тоже можно, но это может тормозить (открытие файла операция не быстрая)...
Здравствуйте, aefimov, Вы писали:
A>Здравствуйте, aka50, Вы писали: A>Вы предлагаете взять N PSI парсеров ,прогнать через них X файлов и полученное PSI дерево (еще надо выбрать какое их них лучше) сохраняем в кешах и рисуем иконку в зависимости от типа PsiFile?
Как-то прям официально , "Вы" . A>Оно умрет Надо как то быстро раскидать файлы для парсеров. Т.е. быстро установить соответствие между файлом и его парсером. Сейчас это делает патернами по имени файла. Вероятно делать первых N байт тоже можно, но это может тормозить (открытие файла операция не быстрая)...
Дык mime — это и есть первые N байт
Но в целом согласен, все таки маска поиска нужна. Другой вопрос, стоит ли затачиваться что это будет именно filename.ext, а не filename.ext.ext2.ext3
Здравствуйте, Аноним, Вы писали:
А>Как проще всего получить имя файла без расширения? А>Могут быть две ситуации А>1. Файл имеет расширение. А>2. Файл не имеет расширения.
А>Как проще всего это обрабатывать?
Ну так мы вроде определились что "расширений" в природе нет
Но!
В прикладной задаче нет ничего проще их заново ввести.
То есть тебе известно, что имя файла имеет вид "имя_незнаю_чего[.расширение]"
Теперь вопрос. Имя_незнаю_чего может содержать точку? Если нет то все банально lastIndexOf и вперед. Иначе нужно больше сведений о том что такое имя_незнаю_чего, какие могут быть расширения, или любую другую инфомацию на эту тему.