我正在尝试对用户是否在命令行中输入(1)文件名或(2)目录名进行一些处理。其他任何东西都应该抛出错误。从最简单的情况开始,我写了这个:
import java.io.*;
import java.util.*;
public class RemoveDuplicates {
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("Program accepts one command-line argument. Exiting!");
System.exit(1);
}
File f = new File(args[0]);
if (f.isDirectory()) {
System.out.println("is directory");
}
else if (f.isFile()) {
System.out.println("is file");
}
else {
System.out.println("Shouldn't happen");
}
}
}
在命令行中,我输入:java RemoveDuplicates example.txt 我得到了重申,“不应该发生。”我也试过java RemoveDuplicates“example.txt”,但这也不起作用。所以我想知道我的代码是否错误,或者我如何将它传递到命令行是错误的。
其次,如何传入目录名?就像你的目录是myDirectory一样,是不是同样的事情:java RemoveDuplicates myDirectory
第三,为什么如果我将我的File f = new File(args [0])放入try块并有一个catch块,我得到一个编译错误,我的try块中的内容永远不会引发异常。我以为File抛出异常?提前谢谢!
答案 0 :(得分:3)
1)您确定example.txt存在于您的工作目录中吗?尝试添加以下内容,看看会发生什么。
File f = new File(args[0]);
if (!f.exists()) {
System.out.println("does not exist");
}
2)你有这个权利。
3)实际上,我没有收到此错误。你是怎么做try / catch的?
答案 1 :(得分:2)
所以我想知道我的代码是否错误,或者我是如何将它传递到命令行的 对于先发球员来说是错误的
该文件是否存在于您的工作目录中?不存在的东西既不是文件也不是目录。尝试创建具有相同名称的示例文本文件,然后调用您的程序。
如何传递目录名
传入代表您的目录的完全限定字符串(例如java MyProg "c:\testdir\mydir"
)传递相对于当前工作目录的目录路径(例如java MyProg testdir/mydir
)
文件f =新文件(args [0])。我以为File抛出异常?
创建新的File
对象不会创建物理文件,因此不会按预期抛出IOException
。只有当您尝试打开文件进行读取或写入时,才会抛出FileNotFoundException
。因此,在将其用于IO之前,始终检查文件是否存在是一种很好的做法。
答案 2 :(得分:0)
C:\ upul \ eclipse \ src \ Test \ src> java RemoveDuplicates RemoveDuplicates.java
是文件
C:\ upul \ eclipse \ src \ Test \ src> java RemoveDuplicates c:\ upul
是目录
答案 3 :(得分:0)