Возможно, ваша оболочка не позволит запустить программу, у которой список аргументов превышает системный лимит.Предполагая, что вы можете изменить вашу Java-программу, вы должны добавить опцию, чтобы получить значение параметра из файла, а не из командной строки.
Вы также можете написать оболочку, которая будет вызывать вашу main
:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class MyWrapper
{
public static void main(String[] args) throws Exception
{
FileReader reader = new FileReader(args[0]);
//assuming the data is the first argument
args[0] = getStringFromReader(reader);
//invoke real main
MyClass.main(args);
}
public static String getStringFromReader(Reader reader) throws IOException
{
final int BUFFER_SIZE = 4096;
char[] buffer = new char[BUFFER_SIZE];
Reader bufferedReader = new BufferedReader(reader, BUFFER_SIZE);
StringBuffer stringBuffer = new StringBuffer();
int length = 0;
while ((length = bufferedReader.read(buffer, 0, BUFFER_SIZE)) != -1)
{
stringBuffer.append(buffer, 0, length);
}
reader.close();
return stringBuffer.toString();
}
}
Тогда вам нужно только вызвать java следующим образом:
java MyWrapper my-file-containing-8k-data [other-args...]