Java String [] args缺少字符

时间:2014-01-03 14:06:26

标签: java arrays string arguments args

我正在编写一个接受文件列表作为输入的代码。我正在进行压力测试,如果有很多文件作为输入,则会发生错误。

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

public static void main(String[] args)

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

-f <file path>

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

当一个角色丢失时,我试图获取字符串的长度,并且它始终是第8090个角色。

实施例: 如果我在嵌套目录中有一个文件列表。我的输入将是这样的。 -f test \ 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

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

2 个答案:

答案 0 :(得分:3)

引用MS Support

  

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

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

答案 1 :(得分:0)

创建第二个主类,其中main用参数读取文件

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