缩短.txt位置以使用扫描仪读取它?

时间:2012-05-20 01:33:49

标签: java function

对于一个类项目,我必须用扫描仪读取.txt文件,让它完美运行。我的教授唯一不高兴的是我的代码硬编码了.txt文件的路径,例如:

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

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

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

我听说这就像在.txt文件名中添加"\"之类的东西,但我不太确定。

6 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

Search recursively in text files in a directory with java?

您可以提供搜索位置,然后递归查看所有文件,直到获得所需的文件名。然后用文件做任何你想做的事。如果允许使用Swing组件,请查看JFileChooser

答案 3 :(得分:0)

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

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

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

当然,只有在您使用main方法等创建扫描程序时,这才有效。您还应该检查args.length以确保参数存在等。

答案 4 :(得分:0)

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

  3. URL urlToInput = this.getClass().getResource("/resources/code.txt");
    

答案 5 :(得分:0)

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

不是将包含文件名的File实例传递到Scanner,为什么不使用Scanner读取文件名,而是创建File的单独实例并传递Scanner读取的文件名?

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

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

用户仍然负责提供文件的完整路径,但至少现在无论用户输入什么,它都没有硬编码到程序中,因为你在示例中显示了它。

我很确定这是你的教授意味着你编写这个程序的方式。