¿Como leer un Propertie externo?

Tengo un programa JAR que corro en un servidor diariamente, para que tome ciertos valores, desde la url de una base de datos, direcciones de carpetas etc. Tengo un archivo de tipo properties dentro del proyecto, el problema que presento, es que tengo que cambiar y agregar constantemente mas variables, y me resulta tedioso compilar y modificar el codigo desde el IDE, y subirlo para remplazar el anterior. Lo que necesito es leerlo externamente, y asi solamente cambiar el archivo por fuera sin necesidad de tenerlo compilado dentro del proyecto.

0
задан 11.11.2016, 20:03
4 ответа

Если ты в настоящее время читаешь твой файл properties, доставая маршрут того же самого с getResourceAsStream, tendrГ-эксперт, который должен использовать один из них mГ©todos, который уже они поместили в другие ответы, где ты читаешь внешнего файла. Проблема состоит в том, чтобы иметь полный маршрут по отношению к вышеупомянутому файлу.

Даже ты можешь сочетать контент внутреннего файла с файлом внешнего файла:

Properties p = new Properties();
try (InputStream ins = getClass().getResourceAsStream("/dentro/del/zip.properties")) {
    p.load(ins);
}
File f = new File("ruta/al/externo.properties);
if (f.exists() && f.canRead()) {
    try(FileInputStream ins = new FileInputStream(f)) {
        p.load(ins);
    }
}

Таким образом ты загружаешь внутренний файл с defaults и только, если существует внешний файл, это загружаешь tambiГ©n, загружая asГ - новую стоимость и sobreescribiendo то, чему он мстит файла внутри JAR.

1
ответ дан 24.11.2019, 12:39

Привет то, что ты можешь делать, состоит в том, чтобы иметь Полезный класс, в котором ты читал бы файл properties, там ты показываешь маршрут, последующий, чтобы делать ему, похвалите, только с getProperty ты будешь должен получать свойства, которые ты захочешь использовать. Я показываю тебе пример и надеюсь, что то, что ты ищешь.

//Bloque en tu clase java para leer un arcvhivo externo
static {
    FileInputStream fis = null;
    try {
        prop = new Properties();
        //indica la ruta donde se encuentra  el archivo properties
        fis = new FileInputStream("/ruta/ruta/ruta/miArvhivoProp.properties");
        //leer archivo properties
        prop.load(fis);
    } catch (Exception e) {
        LOGGER.error("Fallo procesando archivo miArvhivoProp.properties.", e);
    } finally {
        try {
            fis.close();
        } catch (Exception e) {
            LOGGER.error("Fallo cerrando archivo miArvhivoProp.properties.", e);
        }
    }
}
//metodo para retornar una propiedad que se encuentre en el archivo properties
public static String parametro(String propiedad) {
    return (String)prop.getProperty(propiedad);
}
0
ответ дан 24.11.2019, 12:39

Ты можешь использовать Properties :

Properties pop = new Properties();
pop.load(new FileInputStream("mis_properties.properties"));
pop.put("NUEVA_PROPIEDAD", "NUEVO_VALOR");
FileOutputStream output = new FileOutputStream("mis_properties.properties");
pop.store(output, "Editando el archivo properties");
0
ответ дан 24.11.2019, 12:39

До сих пор, это лучший способ, который я нашел, необходимо создавать один mГ©todo из-за каждой переменной:

public String getDestiny() throws IOException
    {
        String valor = null;
        Properties archivoPropertie = new Properties();
        FileInputStream archivo;
        String ruta = "./serverProps.properties"; //Se debe guardar en la misma ruta del JAR
        archivo = new FileInputStream(ruta);
        archivoPropertie.load(archivo);
        archivo.close();
        valor = archivoPropertie.getProperty("destiny");
        return valor;
    }

, Чтобы посылать называть это только, был бы сделан из следующего способа:

    try
    {
         String dstvalor = getDestiny();
    }
    catch(IOException e)
    {
         System.out.println(e.getMessage());
    }
0
ответ дан 24.11.2019, 12:39