簡體   English   中英

Java:將文件名和字符串傳遞給命令行

[英]Java: Passing file name and string to the command line

我有一個小的Java程序,我試圖在命令行傳遞一個文本文件和一個或多個由空格分隔的字符串。 在文本文件中,我有一個包列表,如下所示:

gui -> awtui swingui swingui -> runner extensions textui -> runner
framework awtui -> runner runner -> framework extensions -> framework

現在在我的java中,我想通過在命令行傳遞文本文件和包ame來列出每個包及其依賴項,如下所示:

$ java PackageList sample.txt gui swingui

當我按回車鍵時,我想在控制台上按如下方式列出每個包:

gui -> awtui swingui
swingui -> runner extensions

如您所見,如果未在命令行中作為參數傳遞,則其余軟件包不應出現在輸出中。

這是我的Java代碼,它希望當前打印文件的所有內容,而不管文件名后的命令行參數如何:

public class PackageList {

    public static void main(String[] args) {

        File inputFile = null;
        if (args.length > 0) {
            inputFile = new File(args[0]);
        } else {
            System.err.println("Invalid arguments count:" + args.length);
            System.exit(1);
        }

        BufferedReader br = null;

        try {
            String sCurrentLine;
            br = new BufferedReader(new FileReader(inputFile));
            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

您只從命令行中讀取args [0]。 你想讀這樣的所有其他args。

文件加載后添加

for(int i=1; i<args.length;i++)
{
// read args[i]
}

檢查以下代碼和評論:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class PackageList {

    public static void main(String[] args) {

        File inputFile = null;
        if (args.length > 0) {
            inputFile = new File(args[0]);
        } else {
            System.err.println("Invalid arguments count:" + args.length);
            System.exit(1);
        }

        BufferedReader br = null;

        try {
            String sCurrentLine;
            br = new BufferedReader(new FileReader(inputFile));
            for(int i=1; i < args.length;i++){  // For loop to  check - args[0] is file name so i = 1 
                boolean isDependencyExist = false; // check dependency
                while ((sCurrentLine = br.readLine()) != null) {
                    if(sCurrentLine.startsWith(args[i])){ // If file line starts with arg print
                        System.out.println(sCurrentLine);
                        isDependencyExist = true;
                        break;
                    }
                }
            if(!isDependencyExist){
                System.out.println(args[i] + " ->");
            }
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

最好使用Regex或StringTokenizer解析文件內容,並將鍵和值放入Map中。

然后,您可以通過命令行args查找值並將其打印出來。

偽代碼

Map<String, String> deps = new Hashtable.....;
foreach line of file {
    String[] tokens = line.split(" -> ");
    deps.put(tokens[0], tokens[1]);
}
for (int i=1; i < args.size(); i++) {
    System.out.println(args[i] + " -> " + deps.get(args[i]));
}

這樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM