Java:将文件名和字符串传递给命令行

时间:2016-06-14 05:44:10

标签: java

我有一个小型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();
            }
        }

    }
}

3 个答案:

答案 0 :(得分:0)

您只能从命令行中读取args [0]。你想阅读这样的所有其他args。

加载文件后添加

SELECT c."id", c."key_link", 
       lag(c."notes_extra") over (partition by c."id" order by c."start" desc) as "previous_notes" 
FROM "Orders" c
ORDER BY c."id";

答案 1 :(得分:0)

检查以下代码和评论:

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();
            }
        }

    }
}

答案 2 :(得分:0)

最好使用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]));
}

类似的东西。