Noob问题,在Java中将文件名/目录传递到命令行

Noob问题,在Java中将文件名/目录传递到命令行,java,file-io,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(

我试图对用户是否在命令行中输入(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 RemovedUpplicates myDirectory

第三,为什么如果我把我的文件f=new File(args[0])放入一个try块并有一个catch块,我会得到一个关于try块中的内容的编译错误,而不会抛出异常。我以为文件抛出了异常?提前谢谢

1)您确定您的工作目录中存在example.txt吗?尝试添加以下内容,看看会发生什么

File f = new File(args[0]);
if (!f.exists()) {
  System.out.println("does not exist");
}
2) 你有这个权利

3) 事实上,我不明白这个错误。你是怎么做的

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

    是文件

    C:\upul\eclipse\src\Test\src>java移除了C:\upul的副本

    是目录

    所以我想知道我的代码是否错了,或者我是如何将其传递到命令行的 一开始就错了

    该文件是否存在于您的工作目录中?不存在的东西既不是文件也不是目录。尝试创建一个同名的示例文本文件,然后调用您的程序

    如何传入目录名

    传入表示目录的完全限定字符串(例如
    java-MyProg“c:\testdir\mydir”
    )传入相对于当前工作目录的目录路径(例如
    java-MyProg-testdir/mydir

    文件f=新文件(args[0])。我以为文件抛出了异常

    创建新的
    文件
    对象不会创建物理文件,因此不会按预期引发任何
    IOException
    。仅当您尝试打开文件以读取或写入时,才会引发
    FileNotFoundException
    。因此,在将文件用于IO之前,始终检查文件是否存在是一种很好的做法

  • 您需要键入java RemovedUpplicates。javaexample.txt
  • 您应该能够做到这一点,因为任何东西都可以抛出RuntimeException,它是Exception的一个子类

  • 是的,文件名与我的.java和.class文件位于同一目录中,但是我得到的文件名现在不存在,因为我把它放进去了。我试着写一个文件,它把文件放在同一个目录下,我的文件就在这个目录下。编辑:我只是用一个目录尝试了一下,看起来效果不错。
    example.txt
    应该在运行程序的目录中,而不一定是
    .java
    .class
    文件所在的目录。对我来说,这些都是相同的目录。好的,我现在就可以使用了。在我的目录中,它显示example.txt,但是,我尝试编写的单独文件没有.txt扩展名,因此我假设Windows没有显示它,因为它找到了该文件。因此,我从example.txt名称中删除了.txt。谢谢你的帮助!