如果未提供命令行参数,则为默认行为

时间:2014-05-19 18:35:24

标签: 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 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 如果未输入命令行参数,如何实现我的方案应该创建默认文件夹。请帮忙

4 个答案:

答案 0 :(得分:0)

此代码有效。

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();
            }
        } 
    }
}

答案 1 :(得分:0)

我假设在某些时候,你设置了filename = args [0],否则就不会出现数组访问错误。如果没有提供参数,则数组args将为null,因此访问args [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();
        }
    } 

答案 2 :(得分:0)

这样的事情:

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

}

答案 3 :(得分: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,如果是,则将fileName设置为argv [0],如果不是,则将路径变量设置为。