Te traemos el resultado a esta impedimento, al menos eso deseamos. Si continuas con preguntas puedes escribirlo en el apartado de comentarios y sin dudarlo te ayudaremos
Solución:
Por lo tanto, desea tratar su .properties
archivo en la misma carpeta que el jar principal/ejecutable como un archivo en lugar de como un recurso del jar principal/ejecutable. En ese caso, mi propia solución es la siguiente:
Lo primero es lo primero: la arquitectura de archivos de su programa será así (suponiendo que su programa principal sea main.jar y su archivo de propiedades principal sea main.properties):
./ - the root of your program
|__ main.jar
|__ main.properties
Con esta arquitectura, puede modificar cualquier propiedad en el archivo main.properties usando cualquier editor de texto antes o mientras se ejecuta su main.jar (según el estado actual del programa), ya que es solo un archivo basado en texto. Por ejemplo, su archivo main.properties puede contener:
app.version=1.0.0.0
app.name=Hello
Entonces, cuando ejecuta su programa principal desde su carpeta raíz/base, normalmente lo ejecutará así:
java -jar ./main.jar
o, directamente:
java -jar main.jar
En su main.jar, debe crear algunos métodos de utilidad para cada propiedad que se encuentra en su archivo main.properties; digamos el app.version
la propiedad tendrá getAppVersion()
método de la siguiente manera:
/**
* Gets the app.version property value from
* the ./main.properties file of the base folder
*
* @return app.version string
* @throws IOException
*/
import java.util.Properties;
public static String getAppVersion() throws IOException
String versionString = null;
//to load application's properties, we use this class
Properties mainProperties = new Properties();
FileInputStream file;
//the base folder is ./, the root of the main.properties file
String path = "./main.properties";
//load the file handle for main.properties
file = new FileInputStream(path);
//load all the properties from this file
mainProperties.load(file);
//we have loaded the properties, so close the file handle
file.close();
//retrieve the property we are intrested, the app.version
versionString = mainProperties.getProperty("app.version");
return versionString;
En cualquier parte del programa principal que necesite la app.version
valor, llamamos a su método de la siguiente manera:
String version = null;
try
version = getAppVersion();
catch (IOException ioe)
ioe.printStackTrace();
Lo hice de otra manera.
Properties prop = new Properties();
try
File jarPath=new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
String propertiesPath=jarPath.getParentFile().getAbsolutePath();
System.out.println(" propertiesPath-"+propertiesPath);
prop.load(new FileInputStream(propertiesPath+"/importer.properties"));
catch (IOException e1)
e1.printStackTrace();
- Obtenga la ruta del archivo Jar.
- Obtenga la carpeta principal de ese archivo.
- Use esa ruta en InputStreamPath con su nombre de archivo de propiedades.
Siempre hay un problema para acceder a los archivos en su directorio de archivos desde un archivo jar. Proporcionar el classpath en un archivo jar es muy limitado. En su lugar, intente usar un archivo bat o un archivo sh para iniciar su programa. De esa manera, puede especificar su classpath de la forma que desee, haciendo referencia a cualquier carpeta en cualquier parte del sistema.
También verifique mi respuesta a esta pregunta:
haciendo un archivo .exe para un proyecto java que contiene sqlite
Si haces scroll puedes encontrar las críticas de otros usuarios, tú asimismo puedes mostrar el tuyo si dominas el tema.