我正在编写一个接受文件列表作为输入的代码。我正在进行压力测试,如果有很多文件作为输入,则会发生错误。
我的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个字符。但正在正确读取下一个文件条目。我错过了什么?
答案 0 :(得分:3)
在命令提示符中,在命令提示符下使用的以下命令行的总长度不能超过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()]);
}
}