igg*_*012 0 java command-line-arguments
我有一个库存管理系统,它读取项目和商店的.txt文件和一个名为Stocks的桥接实体,并输出一个.txt文件,该文件根据这三个文件显示信息.
这是在底部.
public class Ims {
private static Logger LOG = Logger.getLogger(Ims.class);
public static void main(String[] args) throws Exception {
PropertyConfigurator.configure("log.properties");
LOG.debug("main()");
File itemsFile = new File("items.txt");
File storesFile = new File("stores.txt");
File stockFile = new File("stocks.txt");
if (!itemsFile.exists()) {
LOG.error("Required 'items.txt' is missing");
} else if (!storesFile.exists()) {
LOG.error("Required 'stores.txt' is missing");
}
new Ims(itemsFile, storesFile, stockFile);
}
public Ims(File itemsFile, File storesFile, File stockFile) {
LOG.debug("Ims()");
HashMap<String, Item> items = null;
HashMap<String, Store> stores = null;
List<Stock> stocks = null;
try {
items = InventoryReader.read(itemsFile);
stores = StoresReader.read(storesFile);
stocks = StockReader.read(stockFile);
} catch (ApplicationException e) {
LOG.error(e.getMessage());
return;
}
// Collections.sort(items, new CompareByPrice()); <-- this should sort it. How do I do this as a command line argument?
File inventory = new File("inventory.txt");
PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream(inventory));
InventoryReport.write(items, stores, stocks, out);
} catch (FileNotFoundException e) {
LOG.error(e.getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够使用命令行参数以多种方式对读取参数进行排序.
例如:
java –jar Ims.jar by_value desc total
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
您在java调用中放置的命令行参数将显示在方法的args参数中 Main.
所以,你会的
args[0] = "by_value"
args[1] = "desc"
args[2] = "total"
Run Code Online (Sandbox Code Playgroud)
更新:如果您的命令行很复杂(标志,任何顺序的参数/缺失),那么有一个Apache CLI(命令行界面)库可以帮助您处理它.
你有什么问题?读取实际的命令行参数?您可以使用args []数组执行此操作,然后只需为所有不同的命令行参数设置一个开关,以允许您对排序执行任何操作.
args []数组内置于多种语言(包括java)中,并允许您轻松访问通过命令行调用时传入的参数.例如,我相信你的例子,你可以通过args [0],desc by args [1]和args [2]等来读'by_value'.
所以为了澄清我在下面的评论中所说的内容,你最终会想要这样的东西:
if (args.length > 0)
{
for (int i=0; i<args.length;i++)
{
switch(args[i])
{
case <whatever your keyword is>: code for this keyword here
break;
case <next keyword>: code for next keyword
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
等等
很抱歉格式和东西有任何奇怪之处,我有一段时间没用过Java,但是这应该可以帮到你.
请注意,如果这是您第一次使用开关,请记住您始终必须有默认值.这通常是某种类型的"无效输入"消息,就像您在javadocs中的示例中看到的那样.
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |