2013-11-15 4 views
3

Я делал некоторую работу для колледжа и мои главные работает в этом:Использование Java System.getProperty («Импорт»)

Spreadsheet sheet = new Spreadsheet(0,0); 
SpreadsheetManager manager = new SpreadsheetManager(sheet); 

/* Read an Import file, if any */ 
String filename = System.getProperty("import"); 

if (filename != null) 
    sheet.parseInputFile(filename, sheet); 

Дело в том, когда я на самом деле пытаюсь импортировать файл, он не делает то, что предполагается, и имя файла всегда null, поэтому он никогда не достигает моего parseInputFile.

Мои учителя сделали кучу кода для различных упражнений по программированию, которые делают похожие вещи, и я также смотрел проекты, которые мои коллеги делали в предыдущие годы, но каждый делает то, что я делаю выше.

Мне нужно запустить мою программу следующим образом: java -Dimport=A-002-002-M-ok.import calc.textui.Calc иначе ни один из тестов, данных учителями, не будет запущен.

Прошу прощения, если это не очень полезный вопрос, но я пробовал искать везде. Если бы кто-нибудь мог объяснить, как работает System.getProperty("import") и почему он не работает в этом случае, я был бы очень благодарен.

+0

Где и как вы установили это свойство? – Ingo

+0

Что вы пытаетесь получить с помощью свойства «import»? – luanjot

+0

@luanjot Я пытаюсь импортировать текстовый файл с кучей инициализаций для моей таблицы. –

ответ

2

При запуске программы с:

java -Dimport=foo 

затем метод вызова

System.getProperty("import") 

должен вернуть "Foo".

Возможно ли, что вы пишете небольшую примерную программу, чтобы убедить себя? Без каких-либо SheetManagers и все вещи, просто

class ItWorks { 
public static void main(String[] args) { 
    System.out.println(System.getProperty("import")); 
} 
} 

Вызов это таким образом

java -Dimport=indeed ItWorks 

и сообщить, что происходит.

Это сообщение: если вы хотите передать аргументы командной строки, почему бы вам не использовать средство для аргументов командной строки? (Т.е. String [] массив передается в главный?)

Вы могли бы назвать свою программу так:

java calc.textui.Calc my-nice-spreadsheet.data 

================== ===================================

Пожалуйста, напишите follwoing в вашей calc.textui.Calc программы сразу после открытой скобки вашего класса:

public class Calc ..... { // a line like this already exists 
    // insert next line here 
    public static String filename = System.getProperty("import"); 

    // rest of your class, as before. 
} 

Затем запишите строку getProperty() в вашем методе, который не работал, но остальное остальное, включая System.out.println(filename);

Изменилось ли это?

+0

Он возвращает «действительно» ... но та же строка в моем исходном коде возвращается null ... Что касается последнего, то тесты, которые проводились преподавателями, вызывались с использованием java -Dimport = A-002-002-M-ok.import calc.textui.Calc; поэтому я не уверен, смогу ли я это сделать. –

+0

@RitaPereira ", но та же строка в моем исходном коде возвращает null" откуда вы это знаете? И, BTW, вы можете, конечно, запустить небольшую тестовую программу с помощью '-Dimport = A-002-002-M-ok.import' – Ingo

+0

Я пробовал добавить System.out.println (имя файла) и возвращает null, не должен ли он возвращать A-002-002-M-ok.import? –

3

Предлагаю вам взглянуть на documentation of System.getProperty().

В основном он извлекает значение из системы, которое уже присутствует или установлено вами.

Чтобы избежать получения null вы можете использовать другой метод подписи, указать значение по умолчанию:

System.getProperty("import", "file.txt");

Чтобы установить свойство системы, вы можете указать его при запуске:

java -Dimport="file.txt" your_application

или устанавливают его программно:

System.setProperty("import", "file.txt");

+0

Дело в том, что я не хочу импортировать «статический» одиночный файл, но батарею разных тестов с разными инициализациями с разными именами. –

+0

, то вам следует, вероятно, взглянуть на аргументы командной строки java. Каждый раз, когда вы вызываете свое приложение с другим путем к файлу, который вы хотите импортировать. См. Http://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html –

+0

Это то, что я делаю при запуске: java -Dimport = A-002-002-M-ok.import calc. textui.Calc; Я сожалею, что беспокоил вас этим, но я действительно не понимаю, где это неправильно, и я все больше и больше смущен этим. –

0

Возможно, свойства системы не являются наиболее показанным способом для этого (в зависимости от вашего приложения).
Можно также использовать аргументы командной строки для передачи имени файла на ваш main метод:

public class CommandLineExample { 

    public static void main(String[] args) { 
     if (args.length < 1) { 
      System.err.println("usage: CommandLineExample <filename>"); 
      System.exit(1); 
     } 

     String filename = args[0]; 
     if (filename !=null && !filename.isEmpty()) { 
      ... 
     } 
    } 

}

Ваша программа должна называться:

java CommandLineExample theFileName 

строка "theFileName" будет передан основному методу в args [0] (любые дополнительные слова будут переданы в последующих позициях args {args [1], args [2], ...})

EDIT
, если программа должна быть вызвана с

java -Dimport=filename ... 

затем System.getProperty("import") возвращает имя файла.
Подтвердите, что вы вызываете правильную программу (имя класса, пакет, версия, последняя компиляция была успешной, ...), а также убедитесь, что свойство не замаскировано как java -Dinport=A-... или имеет дополнительные пробелы, заглавные буквы ...

+0

Мне нужно запустить мою программу, как это: java -Dimport = A-002-002-M-ok.import calc.textui.Calc, иначе ни один из тестов, данных учителями, не запустит –

+0

@RitaPereira, что информация отсутствует в ваш вопрос ... –

+0

извините, я не заметил, я его отредактировал –

Смежные вопросы