Это для общего файла или вы пытаетесь получить родительский каталог исходного файла? Если последнее, я не уверен, что вы понимаете компиляцию Java. Во время выполнения, test.javaвероятно, даже не будет существовать на компьютере, на котором выполняется программа. Запускается скомпилированный .classфайл. Таким образом, это будет работать, только если вы знаете, где dddон находится, и в этом случае нет смысла искать его программно; просто запрограммируйте его.
Марк Петерс
Ответы:
141
Используйте File«s getParentFile()метод и String.lastIndexOf()получить только непосредственный родительский каталог.
Комментарий Марка - лучшее решение, чем lastIndexOf():
file.getParentFile().getName();
Эти решения работают только в том случае, если у файла есть родительский файл (например, созданный с помощью одного из конструкторов файлов, принимающих родительский файл File). Когда getParentFile()имеет значение null, вам нужно прибегнуть к использованию lastIndexOfили использовать что-то вроде Apache CommonsFileNameUtils.getFullPath() :
Существует несколько вариантов сохранения / удаления префикса и конечного разделителя. Вы можете использовать один и тот же FilenameUtilsкласс, чтобы получить имя из результата, использовать lastIndexOfи т. Д.
Вам не нужно lastIndexOf, просто используйте file.getParentFile().getName().
Марк Петерс
13
На всякий случай. Если вернется null(если вы создали Fileэкземпляр с относительным путем) - попробуйте file.getAbsoluteFile().getParentFile().getName().
nidu
1
@MarkPeters Это работает только тогда, когда файл был создан с родительским файлом, хотя, как я предполагаю, относительно редко.
Дэйв Ньютон,
20
File f =newFile("C:/aaa/bbb/ccc/ddd/test.java");System.out.println(f.getParentFile().getName())
f.getParentFile() может быть нулевым, поэтому вы должны его проверить.
Это вызывает исключение ArrayOutOfBoundsException, если вы уже находитесь в корневом каталоге - "/" -
Jnmgr
2
File file =newFile("C:/aaa/bbb/ccc/ddd/test.java");File curentPath =newFile(file.getParent());//get current path "C:/aaa/bbb/ccc/ddd/"String currentFolder= currentPath.getName().toString();//get name of file to string "ddd"
если вам нужно добавить папку «ddd», используя другой путь;
test.java
вероятно, даже не будет существовать на компьютере, на котором выполняется программа. Запускается скомпилированный.class
файл. Таким образом, это будет работать, только если вы знаете, гдеddd
он находится, и в этом случае нет смысла искать его программно; просто запрограммируйте его.Ответы:
Используйте
File
«sgetParentFile()
метод иString.lastIndexOf()
получить только непосредственный родительский каталог.Комментарий Марка - лучшее решение, чем
lastIndexOf()
:Эти решения работают только в том случае, если у файла есть родительский файл (например, созданный с помощью одного из конструкторов файлов, принимающих родительский файл
File
). КогдаgetParentFile()
имеет значение null, вам нужно прибегнуть к использованиюlastIndexOf
или использовать что-то вроде Apache CommonsFileNameUtils.getFullPath()
:Существует несколько вариантов сохранения / удаления префикса и конечного разделителя. Вы можете использовать один и тот же
FilenameUtils
класс, чтобы получить имя из результата, использоватьlastIndexOf
и т. Д.источник
lastIndexOf
, просто используйтеfile.getParentFile().getName()
.null
(если вы создалиFile
экземпляр с относительным путем) - попробуйтеfile.getAbsoluteFile().getParentFile().getName()
.f.getParentFile()
может быть нулевым, поэтому вы должны его проверить.источник
Используйте ниже,
источник
В Java 7 у вас есть новый API Paths . Самое современное и чистое решение - это:
Результат будет:
источник
Если у вас есть только строковый путь и вы не хотите создавать новый объект File, вы можете использовать что-то вроде:
источник
если вам нужно добавить папку «ddd», используя другой путь;
источник
Из java 7 я бы предпочел использовать Path. Вам нужно только ввести путь:
и создайте метод получения:
источник
В Groovy:
Нет необходимости создавать
File
экземпляр для синтаксического анализа строки в Groovy. Это можно сделать следующим образом:Разделение создаст массив,
[C:, aaa, bbb, ccc, ddd, test.java]
а индекс-2
будет указывать на запись перед последней, которая в данном случаеddd
источник
источник