Как записать любой тип файла (например, текстовый файл) в папку ресурсов с файлом config.property, но без использования файла абсолютного пути в Java

Как написать или прочитать любой тип файла (например, .txt файл) в папку ресурсов с config.property файл, но без использования файла абсолютного пути.

Я попытался решить это, как показано ниже:

ClassLoader classLoader = Setting.class.getClassLoader();
Setting setting = new Setting();

try (InputStream resourceAsStream = classLoader.getResourceAsStream("config.properties")) {
   setting.load(resourceAsStream);
}

String readFileName = setting.getValue("pathSource.txt");
String writeFileName = setting.getValue("outPutPathSourceFile.txt");

String s = System.getProperty("line.separator");

File readFile = new File("./src/main/resources" + File.separator + "pathSource.txt");
File writeFile = new File("./src/main/resources" + File.separator + "outPutPathSourceFile.txt");

Однако я не хочу использовать ./src/main/resources префикс.

2 ответа

Решение

Ресурсы (файлы на пути к классам, возможно, внутри jar) могут быть прочитаны, но не предназначены для записи. Вы можете использовать их в качестве шаблона для создания исходной копии в файловой системе. - Joop Eggen

Если ваш файл находится в resources Вы можете получить к нему доступ, как:

Файл file = новый файл (classLoader.getResource(fileName).getFile());

если вы используете Spring, вы можете использовать ResourceUtils.getFile ():

Файл file = ResourceUtils.getFile("classpath:fileName")

ОБНОВИТЬ:

Если я правильно понимаю, вы хотите прочитать файл, который находится под вашим src/main/resources без использования относительного пути /src/main/resources,

Я создал небольшое демо:

public class ReadResourceFile {
    public static void main(String[] args) throws IOException {
        String fileName = "webAutomationConfig.xml";
        ClassLoader classLoader = ReadResourceFile.class.getClassLoader();
        File file = new File(classLoader.getResource(fileName).getFile());

        System.out.println("File exists: " + file.exists());

        String content = new String(Files.readAllBytes(file.toPath()));
        System.out.println(content);
    }
}

Выход:

File exists: true
<?xml version="1.0" encoding="utf-8"?>
<config>
    <baseUrl>https://www.gmail.com</baseUrl>
</config>

Структура проекта:

введите описание изображения здесь

Другие вопросы по тегам