2013-06-26 3 views
0

Привет, я сделал небольшую программу, которая читает файл конфигурации. Этот файл хранится вне фактического файла jar. На том же уровне, что и jarfile. Когда я запускаю свою программу из командной строки в фактическом каталоге (т. Е. D: \ test \ java -jar name.jar argument0 аргумент1), работает отлично.Исключить файл с внешними файлами

Но когда я пытаюсь запустить программу из другого места, тогда в фактической директории я получаю исключение filenotfound (т. Е. D: \ java -jar D: \ test \ name.jar аргумент аргумент1).

Базовая функциональность действительно работает, что я делаю неправильно?

В соответствии с просьбой часть кода:

public LoadConfig() { 
    Properties properties = new Properties(); 

    try { 
     // load the properties file 
     properties.load(new FileInputStream("ibantools.config.properties")); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } // end catch 

    // get the actual values, if the file can't be read it will use the default values. 
    this.environment = properties.getProperty("application.environment","tst"); 
    this.cbc = properties.getProperty("check.bankcode","true"); 
    this.bankcodefile = properties.getProperty("check.bankcodefile","bankcodes.txt"); 
} // end loadconfig 

Папка выглядит следующим образом: enter image description here

Это работает: enter image description here

Это не: enter image description here

В банке не содержится текстовый файл.

+1

Предположительно, ваш код (который вы нам не показали) предполагает, что файл находится в текущем каталоге, но иногда это не так; просто как тот. –

+0

Можете ли вы дать полные команды, которые вы используете? – NightWhisper

+0

Можете ли вы показать нам какой-то код? Кроме того, вы почти, кажется, отвечаете на свой вопрос в своем описании. –

ответ

2

При чтении файла с использованием конструкторов String/path от File, FileInpustream и т. Д. Относительный путь получен из рабочего каталога - каталога, в котором вы начали свою программу.

При чтении файла из Jar файл внешних по отношению к банку, у вас есть по крайней мере два варианта:

  1. Предоставить абсолютный путь: D:/blah/foo/bar
  2. Сделать каталог, в котором файл находится часть пути и использование класса this.getClass().getClassLoader().getResourceAsStream("myfile")

Последнее, вероятно, более подходит для чтения конфигурационных файлов, хранящихся в пути относительно местоположения приложения.