文件名作为主方法

时间:2016-04-18 22:24:36

标签: java arrays string parsing main

在main方法的测试类中,参数设置为文件名(此文件包含整数数据)

以下是代码段:

static Main main = new Main();
static
{
    String[] args = {"../data/filename.txt"};
    main.main(args);
}

由于文件名作为参数传递给main方法,因此文件名的类型为String []。需要解析此文件(或任何其他可能的方法)以获取信息。为此,我使用扫描仪逐行查看。

 public static void main( String[] args )
    {
        List<Integer> left = new ArrayList(); 
        List<Integer> right = new ArrayList();

        try {
            Files.lines(Paths.get("filename.txt"))
                .map(l -> l.split("\\s")) 
                .forEachOrdered(l -> {
                    left.add(Integer.parseInt(l[0]));
                    right.add(Integer.parseInt(l[1]));
               });
        } catch (NumberFormatException | IOException e) {
            e.printStackTrace();
        }

        int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray();
        int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray();
    }

这里的问题是我已经将文件名硬编码到Files.lines(Paths.get(&#34; filename.txt&#34;))中,这是我不想要的。

由于文件名作为参数传递,并且类型为String [],因此我无法使用args作为文件扫描程序的参数。我的问题是,如何将String []转换为String?或者是否有更简单的方法来解析信息? (请记住,文件名将是main的参数)

2 个答案:

答案 0 :(得分:0)

您是否在询问如何索引args数组?就这样做:

Files.lines(args[0])

另外,在测试类中实例化Main没有意义。只需静态调用该方法:

static
{
    String[] args = {"../data/filename.txt"};
    Main.main(args);
}

答案 1 :(得分:0)

你是否尝试过从String [](数组)中取出元素?

java中的参数应该是这样的:

Args [0] - 总是程序名称 Args [1,2 ..] - 参数

所以我认为您应该将第一个代码更改为:

static Main main = new Main();
static
{
    String[] args = {"Main","../data/filename.txt"};
    main.main(args);
}

和第二个代码

public static void main( String[] args )
    {
        List<Integer> left = new ArrayList(); 
        List<Integer> right = new ArrayList();

        try {
            Files.lines(Paths.get(args[1]))
                .map(l -> l.split("\\s")) 
                .forEachOrdered(l -> {
                    left.add(Integer.parseInt(l[0]));
                    right.add(Integer.parseInt(l[1]));
               });
        } catch (NumberFormatException | IOException e) {
            e.printStackTrace();
        }

        int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray();
        int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray();
    }

这是一个很好的改变,所以当你采取&#34;真实&#34;参数。否则,它会获取程序名称。