Java сформировать путь к файлу

В различных операционных системах различается разделитель пути:

  1. Для Windows это \
  2. Для Unix-систем это /

Для того, чтобы при работе с файлами учесть это различие можно использовать следующие подходы:

  1. Использовать значение системного свойства System.getProperty(“file.separator”)
  2. Использовать File.separator
  3. Задавать разделитель вручную

Использование системного свойства file.separator

Полный код приведен ниже:

package ru.mydesignstudio.file;

import java.io.File;
import java.io.IOException;

public class CreateFilepathSystemProperty {
    public static void main(String[] args) {
        String separator = System.getProperty("file.separator");
        System.out.println("Разделитель: " + separator);

        String userDir = System.getProperty("user.dir");
        System.out.println("Пользовательская папка: " + userDir);

        String filename = "createFileWithSeparator1.txt";
        String filepath = userDir + separator + filename;

        File file = new File(filepath);
        try {
            if (file.createNewFile()) {
                System.out.println("Файл создан успешно");
            } else {
                System.out.println("Ошибка при создании файла");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Результат выполнения:

Разделитель: /
Пользовательская папка: /Users/abarmin/IdeaProjects/file
Файл создан успешно

Process finished with exit code 0

 Использование File.separator

Пример с File.separator незначительно отличается от предыдущего:

package ru.mydesignstudio.file;

import java.io.File;
import java.io.IOException;

public class CreateFilepathSystemProperty {
    public static void main(String[] args) {
        String separator = File.separator;
        System.out.println("Разделитель: " + separator);

        String userDir = System.getProperty("user.dir");
        System.out.println("Пользовательская папка: " + userDir);

        String filename = "createFileWithSeparator2.txt";
        String filepath = userDir + separator + filename;

        File file = new File(filepath);
        try {
            if (file.createNewFile()) {
                System.out.println("Файл создан успешно");
            } else {
                System.out.println("Ошибка при создании файла");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Результат выполнения:

Разделитель: /
Пользовательская папка: /Users/abarmin/IdeaProjects/file
Файл создан успешно

Process finished with exit code 0

 Задаем разделитель вручную

package ru.mydesignstudio.file;

import java.io.File;
import java.io.IOException;

public class CreateFilepathSystemProperty {
    public static void main(String[] args) {
        String system = System.getProperty("os.name").toLowerCase();
        System.out.println("Операционная система: " + system);

        
        String separator;
        if (system.contains("win")) {
            separator = "\\";
        } else {
            separator = "/";
        }
        System.out.println("Разделитель: " + separator);

        String userDir = System.getProperty("user.dir");
        System.out.println("Пользовательская папка: " + userDir);

        String filename = "createFileWithSeparator2.txt";
        String filepath = userDir + separator + filename;

        File file = new File(filepath);
        try {
            if (file.createNewFile()) {
                System.out.println("Файл создан успешно");
            } else {
                System.out.println("Ошибка при создании файла");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Результат выполнения:

Операционная система: mac os x
Разделитель: /
Пользовательская папка: /Users/abarmin/IdeaProjects/file
Ошибка при создании файла

Process finished with exit code 0