如何在Eclipse中将文件路径作为Java程序的输入

时间:2017-01-07 00:17:56

标签: java eclipse

我有一个Java程序提示用户输入文件路径和名称,程序将从该文件中读取:

Scanner inScanner = new Scanner(System.in);
inScanner.useDelimiter("\n");
System.out.print("Enter input file path and name:");
String inFile = inScanner.next();
System.out.println("You entered: " + inFile);           
FileInputStream fs = new FileInputStream(inFile); // FAILED HERE

当我在Eclipse中运行这个程序时,我得到了#34;语法错误"错误:

Enter input file path and name: C:\\Users\\My Work\\myFile.txt
You entered: C:\\Users\\My Work\\myFile.txt
(The filename, directory name, or volume label syntax is incorrect)rks\myFile.txt

但如果我在相同的java程序中硬编码相同的路径并从此硬编码值创建FileInputStream,它的工作正常:

 private static final String inFile = "C:\\Users\\My Work\\myFile.txt";

那么如何从Eclipse中的输入中提供此路径?是因为我在路上有空间吗?我试过在输入文件路径周围使用双引号,或者在文件路径中单个\或单个/,它给了我同样的错误。感谢。

1 个答案:

答案 0 :(得分:2)

inScanner.useDelimiter("\n");会导致问题。如果删除它,代码将起作用,无论在文件路径中使用\还是\\

方法useDelimiter(String pattern)使用给定的String作为正则表达式,其行为与您的每日String转义序列不同:

  

调用useDelimiter(pattern)形式的此方法的行为与调用useDelimiter(Pattern.compile(pattern))的方式完全相同。

在Java正则表达式中,\r(回车)和\n(换行)都用作行分隔符。在Unix上,\n可以使用,但在Windows上,您需要\r\n。所以inScanner.useDelimiter("\r\n");也可以。您可以在相关帖子herehere中详细了解此问题。

然而,安全的变体只是使用inScanner.nextLine();而不是分隔符模式和next();,所以你应该坚持这一点,因为它完全是为了这个目的而制作的,正则表达式很难掌握。