【问题标题】:File name as parameter to main method文件名作为主要方法的参数
【发布时间】:2016-08-10 20:42:54
【问题描述】:

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

这里是sn-p的代码:

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 的参数)

【问题讨论】:

    标签: java arrays string parsing main


    【解决方案1】:

    您是在问如何索引args 数组吗?只需这样做:

    Files.lines(args[0])
    

    顺便说一句,在您的测试类中实例化Main 是没有意义的。只需静态调用该方法:

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

    【讨论】:

      【解决方案2】:

      您是否尝试从 String[] (array) 中取出元素?

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-25
        • 2015-03-30
        • 2010-11-03
        • 1970-01-01
        • 2019-11-01
        • 2012-06-01
        • 2013-07-25
        • 1970-01-01
        相关资源
        最近更新 更多