Argument包含引号时的ArrayIndexOutOfBoundsException

时间:2016-09-07 09:15:55

标签: java

我将一个UNC路径作为参数传递给Jar。有时UNC路径可能包含空间。所以我尝试用双引号包装UNC路径,但得到ArrayIndexOutOfBoundsException

例如,以下格式对我来说很好..

xx.jar //someloc/someloc/ Arg2 Arg3 ..

但低于格式ArrayIndexOutOfBoundsException

xx.jar "//some loc/some loc/" Arg2 Arg3 ..

我不确定为什么在使用双引号时抛出错误。有没有办法通过没有引号的空格传递UNC路径?或者我有任何错误吗?

示例代码..

public class Ab
{
static String[] inputparam = new String[20];

public static void main(String[] args) {


        org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
        inputparam = args;
abc();
}
public static void abc() throws IOException, NamingException, URISyntaxException {

        String HadoopConfigPath = inputparam[0];

Configuration config = new Configuration();
        config.set("fs.defaultFS", HadoopURI);
        config.addResource(new File(HadoopConfigPath + "HadoopConfigFiles\\core-site.xml").toURI().toURL());
        config.addResource(new File(HadoopConfigPath + "HadoopConfigFiles\\hdfs-site.xml").toURI().toURL());
        config.addResource(new File(HadoopConfigPath + "HadoopConfigFiles\\mapred-site.xml").toURI().toURL());
        config.addResource(new File(HadoopConfigPath + "HadoopConfigFiles\\yarn-site.xml").toURI().toURL());

2 个答案:

答案 0 :(得分:0)

首先,你的问题质量非常低。你没有提供足够的信息来回答它,但我们可能会有一些假设。

我们假设您的代码已编译。根据您的代码,inputparameters应该被称为inputParameters并且实际上不应该使用args至少有1个元素,因此不可能抛出{{1}调用索引IndexOutOfBoundsException时。重要的事情!它是0而不是``Indexoutofboundsexception`。

现在让我解释一下为什么你的代码不能编译,你可能会运行不同的东西。

  1. 您无法在IndexOutOfBoundsException内声明方法abc。更重要的是,你不能在另一个方法中声明任何方法,除非它是main
  2. 您必须关闭括号。至少有两个Lambda没有关闭!
  3. 最后但并非最不重要的一点是,当你引用它们时,你不必在你的操作系统中逃避斜线......为什么你会“逃避”非反斜杠?

    {

答案 1 :(得分:-1)

我找到了问题并自行解决了。

我实际上在末尾传递了带有额外反斜杠的UNC路径。例如,我正在传递const play = R.forEach(R.when(R.prop('on'), i => playInstrument(time, i.duration))) play(sequenceInstruments) 而不是xx.jar "\\some loc\som loc\"

如果我们在U​​NC Path的末尾使用反斜杠,那么当我们不使用双引号时它没有给出任何问题。但是当我们在最后使用双引号和反斜杠时它会抛出错误。

为了解决这个问题,我添加了一个额外的反斜杠,如下面的

xx.jar "\\some loc\some loc"