Noob问题,将文件名/目录传入Java中的命令行

时间:2010-08-02 04:36:42

标签: java file-io

我正在尝试对用户是否在命令行中输入(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抛出异常?提前谢谢!

4 个答案:

答案 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)

  1. 我编译了&运行你的程序。它按预期工作。
  2. C:\ upul \ eclipse \ src \ Test \ src> java RemoveDuplicates RemoveDuplicates.java

    是文件

    C:\ upul \ eclipse \ src \ Test \ src> java RemoveDuplicates c:\ upul

    是目录

答案 3 :(得分:0)

  1. 您需要输入java RemoveDuplicates。 java example.txt。
  2. 正确。
  3. 您应该可以这样做,因为任何东西都可以抛出RuntimeException,它是Exception的子类。