2010-10-21 144 views
0

我有一個java程序,我需要傳遞給它的主方法一個長度爲8k個字符的參數。所以當我嘗試執行該程序傳遞該參數時,它只是不執行,但沒有顯示錯誤消息。我該如何正確執行該程序?參數長度太長

+3

您可以顯示程序?另外,你是如何執行它? (從另一種方法,從控制檯等) – 2010-10-21 15:39:05

+6

8000個字符的參數?你應該確定你的程序的設計。 – 2010-10-21 15:41:02

+0

我從控制檯執行它。 – Dorr 2010-10-21 15:44:07

回答

2

最好的解決方案是將此8k參數存儲在文件中,並將文件名作爲參數傳遞。然後在你的主要方法中,你應該打開這個文件並閱讀8k個字符。

4

你的shell可能不允許執行一個具有超出系統限制的參數列表的程序。假設可以修改你的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...]

+0

我不能以這種方式修改程序,我應該從命令行獲取值。 – Dorr 2010-10-21 16:10:51

+1

建議的程序不是修改,它是一個補充。這是一個不必修改現有程序的技巧。你只需要編譯它並將它和你的應用程序jar一起添加到你的classpath中。基本思想是「如果你可以從命令行調用它,你可以從Java代碼中調用它」。 – gawi 2010-10-21 16:28:29

+0

在UNIX下,還可以使用下面的技巧'java MyClass'cat my-file-containing-8k-data'' – gawi 2010-10-21 16:30:39