【问题标题】:Java String[] args missing character [duplicate]Java String [] args缺少字符[重复]
【发布时间】:2014-01-21 05:31:40
【问题描述】:

我正在编写一个接受文件列表作为输入的代码。我正在做压力测试,如果有很多文件作为输入,就会出现错误。

我的 main 函数接受一个字符串数组作为输入。

public static void main(String[] args)

我有大约 200 个文件作为输入。我的 args 接受这种格式的输入:

-f <file path>

在文件列表的某一点上,Java 将抛出一个 File Not Found 异常,因为它获得了不正确的路径。总是只缺少一个字符。并且正确读取了前面的文件条目。

当一个字符丢失时,我试图获取字符串的长度,它总是在第 8090 个字符上。

示例: 如果我在嵌套目录中有文件列表。我的输入将是这样的。 -f 测试\test1\test1_test2\test1_test2_test3\test3_test4.txt

这种重复输入会导致:

-f test\test1\test1_test2\test1_test2_test3\test3_test4.txt
...
-f test\test1\test1_**tst2**\test1_test2_test3\test3_test4.txt
...
-f test\test1\test1_test2\test1_test2_test3\test3_test4.txt

缺少应该是第 8090 个字符的“e”。但是正在正确读取下一个文件条目。我错过了什么?

【问题讨论】:

  • 你试过用“”引用吗?
  • 嗨 A4L,在我的输入中,奇怪的是缺少一个字符,但下一个字符被正确读取。操作系统只抛出“命令太长”错误会更合适吗?

标签: java arrays string arguments args


【解决方案1】:

创建第二个主类,其中主类读取带有参数的文件

public class MainWithArgsFile {
    public static void main(String[] fileArgs) {
        List<String> args = new ArrayList<>();
        // Fill args:
        for (String fileArg: fileArgs) { // One or more files.
            try (BufferedReader in = new BufferedRead(new InputStreamReader(
                    new FileInputStream(new File(fileArg)), "UTF-8"))) {
                for (;;) {
                    String line = in.readLine();
                    if (line == null) {
                        break;
                    }
                    //args.add(line); // One arg per line (for instance).
                    Collections.addAll(args, line.split(" +"));
                }
            }
        }
        OriginalMain.main(args.toArray(new String[args.size()]);
    }
}

【讨论】:

    【解决方案2】:

    引用MS Support

    在命令提示符中,您在命令提示符下使用的以下命令行的总长度不能超过 2047 或 8191 个字符(取决于您的操作系统)

    因此,这意味着您不能将超过 8191 个字符的参数传递给您的程序。但解决方法可能是将您的参数存储到文件中并通过命令行将该文件传递给您的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 2015-09-06
      • 2018-01-08
      相关资源
      最近更新 更多