对于一个类项目,我必须用扫描仪读取.txt
文件,让它完美运行。我的教授唯一不高兴的是我的代码硬编码了.txt
文件的路径,例如:
Scanner sc = new Scanner(new File("Users/Me/Documents/Programming/code.txt"));
这意味着只有当文件位于该文件夹中时才会读取该文件。无论如何,我想知道的是如何让扫描仪搜索我的文档并读取文件,而不是在确切的文件夹中,使它看起来像这样?
Scanner sc = new Scanner(new File("code.txt"));
我听说这就像在.txt文件名中添加"\"
之类的东西,但我不太确定。
答案 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”会将您带到上一个目录,依此类推。
答案 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)
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));
用户仍然负责提供文件的完整路径,但至少现在无论用户输入什么,它都没有硬编码到程序中,因为你在示例中显示了它。
我很确定这是你的教授意味着你编写这个程序的方式。