Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未提供命令行参数时的默认行为_Java - Fatal编程技术网

Java 未提供命令行参数时的默认行为

Java 未提供命令行参数时的默认行为,java,Java,我已经编写了一个java代码来创建一个文件,若命令行参数中提供了文件名,若并没有输入命令行参数,它将在默认文件夹中创建文件 import java.io.File; import java.io.IOException; public class Outputlogs { private final String path = "C:/temp/logs.txt"; public void createLogFile(String fileNam

我已经编写了一个java代码来创建一个文件,若命令行参数中提供了文件名,若并没有输入命令行参数,它将在默认文件夹中创建文件

    import java.io.File;
    import java.io.IOException;

    public class Outputlogs {


    private final String path = "C:/temp/logs.txt";


    public void createLogFile(String fileName) 
    {
        if(fileName != null && !fileName.isEmpty())
        {

            File yourFile = new File(fileName);
            if(!yourFile.exists()) {
                try {
                    yourFile.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } 
            } 

        else
        {
            File yourFile = new File(path);
            if(!yourFile.exists()) {
                try {
                    yourFile.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
}

}
public class MainClass()
{
public static void main(String[] argv)
{

  String fileName = argv[0];

Outputlogs logs= new Outputlogs();
logs.createLogFile(fileName);
}
如果我提供了命令行参数,它将成功创建文件,但是如果没有输入命令行参数,我将获得java.lang.ArrayIndexOutOfBoundsException 如何实现我的方案如果未输入命令行参数,则应创建默认文件夹。请帮助

此代码有效

import java.io.File;
import java.io.IOException;

public class Test {
    private static final String path = "C:/temp/logs.txt";

    public static void main(String[] args) {
        if(args.length > 0) {
           createLogFile(args[0]);
        } else {
           createLogFile(path);
        }
    }

    public static void createLogFile(String fileName) 
    {
        File f = new File(fileName);
        if(!f.exists()) {
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } 
    }
}

我假设在某个时刻,您正在设置filename=args[0],否则不会出现数组访问错误。如果未提供任何参数,数组参数将为null,因此访问参数[0]将返回ArrayIndexOutofBounds异常。只需先检查长度:

if(args.length > 0)
    fileName = args[0];
else
    fileName = path;
然后,您可以将if/else语句组合成一条语句,因为此时它的文件名将是参数或默认路径:

 File yourFile = new File(fileName);
    if(!yourFile.exists()) {
        try {
            yourFile.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } 
大概是这样的:

    public static void main(String[] args) {
       if (args.length > 0)
          createLogFile(args[0]) ;

}

argv[0]表示参数列表(数组)中的第一个元素,因此必须检查是否至少提供了一个参数。 您可以使用array.length检查数组中的项目数量,因此高于0的所有内容都将告诉您可以访问第一个(或第二个、第三个)参数

public static void main(String[] argv)
{

  String fileName = (argv.length > 0) ? argv[0]:path; // changed

Outputlogs logs= new Outputlogs();
logs.createLogFile(fileName);
}

此行将检查数组的长度是否大于0,如果大于0,则将文件名设置为argv[0],如果大于0,则使用path变量。

请发布
main
方法。检查命令行参数的长度,如果它是
0
,那么使用default哪一行抛出越界异常?听起来像是在访问参数数组中不存在的元素。我们需要查看你的main()方法。据我所知,你发布的代码与错误无关。至少,这是我能想到的关于你发布的代码的唯一答案。如果错误来自此代码之外,我们将需要更多信息感谢您的所有回复如果
args
为null,您将得到一个NullPointerException-准确地说,args是一个长度==0的非null字符串数组,数组使用基于零的索引,因此
args[0]
引用第一个数组元素,但零长度数组中没有第一个元素。非常正确。我不明白ArrayIndexOutOfBounds异常是从哪里来的。尽管如此,该代码仍然可以工作并修复他特别提出的问题。