2

对于一个班级项目,我必须.txt用扫描仪读取一个文件,让它完美地工作。我的教授唯一不满意的是我的代码硬编码了.txt文件的路径,例如:

Scanner sc = new Scanner(new File("Users/Me/Documents/Programming/code.txt"));

这意味着它只会读取位于该确切文件夹中的文件。无论如何,我想知道的是如何让扫描仪搜索我的文档并读取文件,而不将它放在那个确切的文件夹中,让它看起来像这样?

Scanner sc = new Scanner(new File("code.txt"));

我听说这就像"\"在 .txt 文件名中添加一个,但我不太确定。

4

6 回答 6

2

我认为您的教授正在推动将命令行参数传递给您的 Java 程序的想法。还记得String[] args签名中的static void main吗?这就是他可能希望您使用的机制,因为它是最灵活的一种。

由于您可以在命令行上将任意数量的字符串传递给您的程序,因此您可以约定第一个参数是用户希望您的程序打开的文件的名称。

static public void main(String[] args) {
    if (args.length < 1) {
        System.err.println("Please pass a file name argument.");
        return;
    }
    Scanner sc = new Scanner(new File(args[0]));
    // ... do something useful
}
于 2012-05-20T01:37:33.283 回答
1

只要 code.txt 在同一目录中,“code.txt”就可以正常工作。

否则,“../code.txt”会将您带到上一个目录,依此类推。

于 2012-05-20T01:35:15.653 回答
1

好吧,如果您真的希望您的程序搜索文件名并获取它,请调整此处的答案之一。

使用java递归搜索目录中的文本文件?

您可以提供一个位置进行搜索,然后递归查看所有文件,直到获得所需的文件名。然后对文件做任何你想做的事情。另请查看 JFileChooser是否允许使用 Swing 组件。

于 2012-05-20T01:59:37.590 回答
0

好的,我很确定以下是您的教授想要的,因为我被分配了相同的任务。

与其将File包含文件名的实例传递给Scanner,为什么不直接使用 读取文件名Scanner,创建一个单独的实例File并将读取的文件名传递给它Scanner

Scanner input = new Scanner(System.in);
String fileName = input.nextLine();

Scanner scan = new Scanner(new File(fileName));

用户仍将负责提供文件的完整路径,但至少现在它是用户输入的任何内容,并且它没有像您在示例中显示的那样硬编码到程序中。

我很确定这就是你的教授对你写这个程序的意思。

于 2012-05-20T02:37:01.473 回答
0

如果这是一个 Java 应用程序,请尝试

Scanner sc = new Scanner(new File(args[0]));

并提供文件名作为第一个命令行参数。

当然,这仅适用于在您的main方法中创建扫描仪等情况。您还应该检查args.length以确保参数存在等。

于 2012-05-20T01:37:37.120 回答
0
  1. 如果在运行时指定此文本文件,则从提供给 main 的参数数组中读取它。
  2. 如果它是嵌入式(常量)应用程序资源,请使用以下内容获取它的 URL:

URL urlToInput = this.getClass().getResource("/resources/code.txt");
于 2012-05-20T01:59:04.053 回答