#java #file #path #directory #absolute-path
#java #файл #путь #каталог #абсолютный путь
Вопрос:
Я создал папку ‘Maths’ в /home/vamshi/Documents/Eval/Files/standard6/Maths/ и поместил в нее несколько файлов. Они hello.txt , world.txt
Теперь я использовал этот Java-код для обхода каталога
System.out.println("DIRECTORY PATH IS :" path);
File f = new File(path);
System.out.println("DIRECTORY ABS PATH IS :" f.getAbsolutePath());
if( f.isDirectory() )
{
String[] subNote = f.list();
for(String filename : subNote)
{
File tempFile = new File(filename);
System.out.println("FILE PATH:" tempFile.getAbsolutePath());
}
}
else
{
System.out.println("Its not a directory!");
}
Вывод :
ПУТЬ К КАТАЛОГУ:/home/vamshi/Documents/Eval/Files/standard6/Maths/
ПУТЬ К КАТАЛОГУ ABS:/home/vamshi/Documents/Eval/Files/standard6/Maths
ФАЙЛ PATH:/home/vamshi/workspaceNew/Server/GUI_Version_Netbeans/server/hello.txt
ФАЙЛ PATH:/home/vamshi/workspaceNew/Server/GUI_Version_Netbeans/server/world.txt
Как это возможно? Почему файлы внутри каталога Maths имеют абсолютный путь проекта Netbeans?
Ответ №1:
Когда вы создаете новый файл, используя только имя файла, это создает файл в каталоге по умолчанию. В этом случае файл помещается в «/home/vamshi/workspaceNew/Server/ GUI_Version_Netbeans/server/»
Вместо того, чтобы указывать только имя файла:
File tempFile = new File(filename);
Укажите желаемый путь и имя файла, например:
File tempFile = new File(path filename);
Это должно создать файл и поместить его в нужное место.
Комментарии:
1. Я понял. Большое спасибо.
2. Я хотел бы получить имена путей всех файлов в каталоге. Есть ли какой-либо способ без создания файла?
Ответ №2:
File#list()
javadoc заявляет
Каждая строка представляет собой имя файла, а не полный путь.
Другими словами, для каталога File maths
/home/vamshi/Documents/Eval/Files/standard6/Maths/
где каталог содержит
abc.txt (file)
123.json (file)
/home (directory)
Затем этот код
maths.list();
вернет String[]
файл, содержащий
["abc.txt", "123.json", "home"]
Эти имена не имеют никакого отношения к приведенному File
выше. Когда вы создаете новые File
объекты из этих String
имен, их абсолютные пути разрешаются относительно текущего рабочего каталога.
В Java 8 выполните
Stream<Path> paths = Files.list(Paths.get(".").toAbsolutePath());
чтобы получить Stream<Path>
файл, содержащий все абсолютные пути к файлам внутри вашего каталога.
Комментарии:
1. Спасибо за подробный ответ.
2. Я хотел бы получить имена путей всех файлов в каталоге. Есть ли какой-либо способ без создания файла?
3. @Vamshi В Java 8 используйте
Files.list(Path)
. Смотрите мое редактирование.