0

私は、Items と Stores の .txt ファイルと Stocks と呼ばれるブリッジ エンティティを読み取り、これら 3 つのファイルに基づいて情報を表示する .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());
        }
    }
}

コマンドライン引数を使用して、さまざまな方法で引数の読み取りをソートできるようにしたいと考えています。

例えば:

java –jar Ims.jar by_value desc total

どうすればいいですか?

4

2 に答える 2

5

Java 呼び出しに入力したコマンド ライン パラメーターは、メソッドのargsパラメーターに 表示されます。Main

だから、あなたは持っているでしょう

 args[0] = "by_value"
 args[1] = "desc"
 args[2] = "total"

更新: コマンド ラインが複雑な場合 (フラグ、任意の順序のパラメーター/欠落)、対処に役立つ Apache CLI (コマンド ライン インターフェイス) ライブラリがあります。

于 2012-11-05T18:42:47.190 に答える
5

何に困っていますか?実際のコマンドライン引数を読んでいますか? args[] 配列を使用してそれを行うことができます。次に、許可するすべての異なるコマンド ライン引数にスイッチを入れるだけで、並べ替えに必要な操作を行うことができます。

args[] 配列は多くの言語 (Java を含む) に組み込まれており、コマンド ラインから何かを呼び出したときに渡される引数に簡単にアクセスできます。たとえば、私はあなたの例を信じています.args [0]、desc by args [1]、total by 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;
     }
  }
}

書式設定などに奇妙な点があり申し訳ありません。しばらく Java を使用していませんでしたが、これでうまくいくはずです。

初めてスイッチを使用する場合は、常にデフォルトが必要であることを覚えておいてください。これは通常、javadocs の例でわかるように、何らかの「無効な入力」メッセージです。

于 2012-11-05T18:43:15.040 に答える