文件名作为主方法的参数



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

以下是代码片段:

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("filename.txt"))中,这是我不想要的。

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

您是否在询问如何对args数组进行索引?只需这样做:

Files.lines(args[0])

附带说明一下,在测试类中实例化Main是没有意义的。只需静态调用方法:

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

您只是想从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();
    }

这是一个很好的改变,所以当你接受"真实"的论点时,它不会停止工作。否则它会取程序名。

相关内容

  • 没有找到相关文章

最新更新