Чтение данных из ini-файла

Доброго времени суток!

Есть задача своим сервисом читать ini файл другого приложения, получать необходимый параметр из него, и дальше передавать его другим методам в виде String.

Возникла следующая проблема: если это делать через getProperty("Path"), то теряются наклонные черты \ и "съедается" ближайший конец строки.

Попробовал прочитать методом readLine() - и сначала было так же, но потом, когда я указал кодировку UTF-16, строчка стала выводиться корректно.

Мне кажется немного костыльным решением читать ini таким образом...

Подскажите, пожалуйста как можно исправить ситуацию в случае с использованием Properties?

И корректно ли было бы обрабатывать ini методами вроде readLine()? Или все же в первую очередь - Properties?

Код тестовой реализации:

package com.benderje.PCC;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public class TEST {

    public static void main(String[] args) {
        try {
            readLines(createReader());
            readProps(createReader());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static void readLines(BufferedReader reader) throws IOException {
        String line;
        while ((line = reader.readLine()) != null){
            if (line.startsWith("Path=")){
                System.out.println(line.substring(5));
                reader.close();
                break;
            }
        }
    }

    private static void readProps(BufferedReader reader) throws IOException {
        Properties properties = new Properties();
        properties.load(reader);
        System.out.println(properties.getProperty("Path"));
        reader.close();
    }

    private static BufferedReader createReader() throws FileNotFoundException {
        return new BufferedReader(
                new InputStreamReader(
                        new FileInputStream("TestFile.ini"), StandardCharsets.UTF_16));
    }
}

Вывод программы:

localhost:C:\DB\TestBase\
localhost:C:DBTTestBaseUser=SYSDBA

Фрагмент ini файла:

Path=localhost:C:\DB\TestBase\
User=UserLogin
Pass=$796....
DB=MAIN.GDB
Log=LOG.GDB

P.S. Notepad++ определяет кодировку, как UTF-16, символы конца строки везде рисует...

UPD Как указал @XelaNimed в комментарии ниже, главная проблема вывода - для Properties необходимо экранировать слэши. Т.к. мы не можем изменить этот ini, или как-то влиять на него, решено парсить файл в String.

UPD2 Поиски в интернете привели к выводу, что к проблемам с кодировками в Java могут привести такие моменты, как, например, среда, в которой запускается JVM. У нас клиенты работают как на winXP, так и на win10. Поэтому было решено добавить проверку кодировки "костылем":

В цикле перебираем кодировки (массив кодировок из StandartCharsets), читаем первую строку, проверяем в ней contains("известнаяНамСтрока"). Если совпало - setCharset() и brake, иначе перебираем дальше...

Насколько я понял, определение кодировки файла - отдельный головняк. Если кто-то знает, как он решается грамотно, буду рад ответу...


Ответы (1 шт):

Автор решения: Труфальдино
String fileName="file:///C://temp//pro.properties";
List <String> res =  Files.readAllLines(Path.of(new URI(fileName)));
res.forEach(System.out::println);
→ Ссылка