2013-04-04 4 views
0

После многих статей и комментариев файла свойств я действительно потерян.Используйте файл свойства в JAR

Все, что я хочу, это получить значения и перезаписать их - и я хочу использовать это с jar-файлом.

Если я скомпилирован в eclipse, он отлично работает, но в момент компиляции я получил знаменитый «файл свойств не найден» -exception.

FileInputStream in = new FileInputStream(ClassLoader.getSystemResource("client.properties").getPath()); 
Properties props = new Properties(); 
     props.load(in); 
     in.close(); 

Исключение я получил следующий:

C:\Users\thomas\Desktop>java -jar erp_auer_client_v0_1.jar 
java.io.FileNotFoundException: file:\C:\Users\thomas\Desktop\erp_auer_client_v0_ 
1.jar!\client.properties (Die Syntax f³r den Dateinamen, Verzeichnisnamen oder d 
ie Datentrõgerbezeichnung ist falsch) 
     at java.io.FileInputStream.open(Native Method) 
     at java.io.FileInputStream.<init>(Unknown Source) 
     at java.io.FileInputStream.<init>(Unknown Source) 
     at global_functions.helperFunctions.getPathBARTENDEREXE(helperFunctions. 
java:361) 
     at client.programmeinstellungen.ProgrammEinstellungenManagement.<init>(P 
rogrammEinstellungenManagement.java:59) 
     at client.main.MainOverview$11.mousePressed(MainOverview.java:275) 

немецкой части (Die Синтаксис f³r ден Dateinamen, Verzeichnisnamen Одер д т.е. Datentrõgerbezeichnung IST Falsch) означает «синтаксис имени файла, каталога имя или имя диска неверны ».

У вас есть идея, что это может быть?

+0

Вы хотите, чтобы ваш файл свойств находился в банке (нормально, не проблема). Затем вы хотите сохранить значения в этом файле свойств, не так ли? Я не уверен, что это возможно, потому что файл jar является автономным файлом, и ваше приложение должно запускаться внутри этого автономного файла. Я думаю, вы можете работать с Eclipse только потому, что Eclipse делает это из папки, где хранится ваш проект, а не из реального файла jar ... Это имеет смысл? – Rafa

+0

Благодарим вас за быстрый ответ. Но если да, то как/где я могу хранить значения навсегда и изменить их снова? – tomier

+0

В любом месте за пределами файла jar: (1) Вы можете жестко закодировать данное местоположение; (2) Вы можете просто предположить, что ваш файл свойств будет находиться в той же папке, что и ваш файл jar; (3) Вы можете добавить параметр с расположением файла и работать с ним, например: java -jar erp_auer_client_v0_1.jar -filePath c: \ temp \ client.properties – Rafa

ответ

0

Хорошо, я попробовал сам и понял, что это немного сложнее, чем я думал изначально. Тем не менее, я думаю, что в вашем сценарии вы можете просто использовать что-то вроде ниже. Я тестировал в windows и linux и отлично работал для меня:

package mypackage; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 
import java.net.URISyntaxException; 
import java.util.Date; 
import java.util.Properties; 

public class MyMainClass { 

    public static void main(String[] args) throws URISyntaxException { 
     /* 
     * 
     * MyMainClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath(); 
     * In Linux it returns null 
     * 
     * ClassLoader.getSystemClassLoader().getResource(".").getPath() + "MyProperty.properties"; 
     * In Linux it returns {JRE_PATH}/lib/ext/pulse-java.jar 
     * In Windows it returns {JAR_FILE_PATH} 
     */ 

     String propertyFilePath = "MyProperty.properties"; 
     Properties props = new Properties(); 
     try { 
      FileInputStream in = new FileInputStream(propertyFilePath); 
      props.load(in); 
      in.close(); 
     } catch (Exception e) { 
      File f = new File(propertyFilePath); 
      System.err.println("Could not read file: " + f.getAbsolutePath()); 
     } 

     System.out.println("Fetching property value of [now]: " + props.get("now")); 
     String now = new Date().toString(); 
     System.out.println("Storing property [now]: " + now); 
     props.setProperty("now", now); 

     try { 
      OutputStream out = new FileOutputStream(propertyFilePath); 
      props.store(out, "Saving value of [now]"); 
     } catch (Exception e) { 
      File f = new File(propertyFilePath); 
      System.err.println("Could not write file: " + f.getAbsolutePath()); 
     } 
    } 
} 
Смежные вопросы