تهيئة البرنامج بالملفات التي تم تمريرها كوسائط رئيسية (system.getProperty())

StackOverflow https://stackoverflow.com/questions/1693744

سؤال

لا بد لي من تنفيذ برنامجي مع هذا السطر:

java -DImport=data.txt -Din=input.dat -Dout=output1.dat main.Main

لقد كنت أحاول معرفة كيفية القيام بذلك ولكن لا يمكنني تشغيله حقًا.أنا أستخدم Netbeans لأنني لا أتفق حقًا مع مسارات الفصل الطرفية لنظام التشغيل Unix وما إلى ذلك.

public static void main(String[] args) {    
    String fileIn;
    fileIn = System.getProperty ("Import");
}

أصبح fileIn فارغًا نتيجة للبيان السابق.

لقد بدأت للتو بـ -DImport=data.txt، وبعد أن أحلها سأجرب الآخرين.


تم الانتهاء من هذا الجزء، شكرا لك.سأحاول تعيين stdin كملف -Din بدلاً من لوحة المفاتيح.شكرًا


لقد فعلت ما قلته Cartoonfox، طباعته Import null مما يعني أن fileIn لا يتلقى أي سلسلة من System.getProperty("Import");

أنا أيضا أتلقى هذا التحذير:

تحذير:إهمال] readline () في java.io.datainputStream تم إهمال الخط = dis.readline () ؛

أنا أستخدم الكود من هذه الصفحة: http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html لأنني لا أعرف الكثير من القراء :(

هل كانت مفيدة؟

المحلول

أعتقد أنك تخلط بين مفهومين:

  • جافا الحجج يشير إلى المعلمات التي تم تمريرها بعد اسم الفئة.لذلك إذا اتصلت:

جافا الرئيسية.MyMain 0 1 2

لك الحجج سوف يكون:

الوسائط[0] = 0

الوسائط[1] = 1

الوسائط[2] = 2

  • جافا ملكيات هي ما تمر به مع -D كما في -DImport=data.txt

في التعليمات البرمجية الخاصة بك تقوم بخلط كليهما.قم بإزالة الخط

إذا (args.length == 1)

وسوف تعمل :)

نصائح أخرى

يسقط if (args.length == 1) لأنك لا تقوم بتحليل الوسائط، بل تقوم بتعيين خصائص النظام.

وسيطات البرنامج تتبع الفئة الرئيسية مثل هذا

main.Main arg1=val arg2=val2

فكر في -Import=foo كطريقة لتعيين خيار التكوين "Import" على قيمة "foo".

فقط قم بإسقاط عبارة if:

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}

راجع للشغل أعتقد أن Sun اختار -D (بدلاً من - شيء آخر) لأن الكثير من مترجمات لغة C تسمح لك بتعيين ماكرو في سطر الأوامر باستخدام -D - مما يعني أنها ستكون طريقة لتعيين "ثوابت" مسماة في الأمر -خط...وهو مشابه لما يفعله في جافا.

لست متأكدًا من سبب عدم تشغيلك لهذا، لذا إليك نسخة من تجميعي وتشغيله - مع الإخراج. سيتعين عليك إلقاء نظرة على الاختلافات بين ما تفعله وما أفعله في هذا النص:

Script started on Sat Nov  7 18:16:25 2009
bash-3.2$ cat T.java
public class T {

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}
}
bash-3.2$ javac T.java
bash-3.2$ java -DImport=data.txt -Din=input.dat -Dout=output1.dat T
Import data.txt
bash-3.2$ exit
exit

Script done on Sat Nov  7 18:17:07 2009
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top