Абсолютный путь к файлу Java не указывает желаемый путь

#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) . Смотрите мое редактирование.