Séparateur de fichiers en java sur Linux et Windows
J'ai un java swing application de base de données qui doit être exécuté sur windows et Linux, ma connexion à la base de données sont stockées dans un fichier XML et je me charge d'eux comme,
cette application peut charger cette liste de propriétés sur Linux correctement, mais il ne fonctionne pas sur windows, s'il vous plaît dites-moi comment faire pour charger les fichiers sur de multiples plateformes correctement.
c'est le code,
PropertyHandler propertyWriter = new PropertyHandler();
//get properties from the xml in the file structure
List keys = new ArrayList();
keys.add("ip");
keys.add("database");
Map localProps = propertyWriter.read(keys, "conf" + File.separatorChar + "properties.xml", true);//if false load from the local properties
//get properties from the xml in the internal package
List seKeys = new ArrayList();
seKeys.add("driver");
seKeys.add("username");
seKeys.add("password");
Map seProps = propertyWriter.read(seKeys, "conf" + File.separatorChar + "properties.xml", true);
String dsn = "jdbc:mysql://" + (String) localProps.get("ip") + ":3306/" + (String) localProps.get("database");
jDBCConnectionPool = new JDBCConnectionPool((String) seProps.get("driver"), dsn, (String) seProps.get("username"), (String) seProps.get("password"));
lecteur de fichiers méthode,
public Map read(List properties, String path, boolean isConfFromClassPath) {
Properties prop = new Properties();
Map props = new HashMap();
try {
if (isConfFromClassPath) {
InputStream in = this.getClass().getClassLoader().getResourceAsStream(path);
prop.loadFromXML(in);
for (Iterator i = properties.iterator(); i.hasNext();) {
String key = (String) i.next();
props.put(key, prop.getProperty(key));
}
in.close();
} else {
FileInputStream in = new FileInputStream(path);
prop.loadFromXML(in);
for (Iterator i = properties.iterator(); i.hasNext();) {
String key = (String) i.next();
props.put(key, prop.getProperty(key));
}
in.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return props;
}
Habituellement, vous pouvez aller avec le
Définir "ne fonctionne pas correctement".
Est-il une exception ou d'une trace de votre code?
Il travaille dans le tous cas. Je n'ai jamais utiliser la barre oblique inverse dans les noms de fichiers.
/
, cela fonctionne dans la plupart des cas: "conf/properties.xml"
(même sous Windows).Définir "ne fonctionne pas correctement".
Est-il une exception ou d'une trace de votre code?
Il travaille dans le tous cas. Je n'ai jamais utiliser la barre oblique inverse dans les noms de fichiers.
OriginalL'auteur Harsha | 2012-05-15
Vous devez vous connecter pour publier un commentaire.
Si le fichier est un fichier jar et est accessible par le chemin de classe, alors vous devez toujours utiliser
/
.La Javadoc de la
ClassLoader.getResource
dire que "le nom de La ressource est un '/'chemin séparé nom qui identifie la ressource."http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ClassLoader.html#getResource(java.lang.Chaîne)
OriginalL'auteur yiannis
Je ne suis pas sûr si il est la bonne façon, mais l'une:
Mais dans un scénario aussi simple que la vôtre, je voudrais juste utiliser
/
Je ne recommanderais pas cette approche pour ce scénario, mais il en existe d'autres, par exemple la lecture de plusieurs fichiers dans un répertoire qui a été passée en argument.
OriginalL'auteur Cephalopod
Si c'est une ressource située dans le classpath, on peut le charger avec de l'extrait de code suivant:
OriginalL'auteur James Gan
Vous pouvez charger tous les fichiers sur de multiples plates-formes, sans aucun problème.
Veuillez utiliser Matcher.quoteReplacement(Fichier.séparateur) pour le remplacement de la barre oblique.
Ça fonctionne pour toutes les plates-formes.
OriginalL'auteur Radadiya Nikunj
en supposant que votre fichier est en cours d'conf/properties.xml sur Linux et conf\properties.xml sur Windows,
utiliser le Fichier.pathSeparator au lieu de Fichier.séparateur
Noup, il n'est pas de travail ici, j'obtiens une erreur lors de la lecture du fichier.
C'est incorrect. pathSeparator est le ";" ou ":".
Ouais, vous avez raison - a l'envers 🙁
OriginalL'auteur GreyBeardedGeek