Java 未提供命令行参数时的默认行为
我已经编写了一个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
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异常是从哪里来的。尽管如此,该代码仍然可以工作并修复他特别提出的问题。