我有一个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中的输入中提供此路径?是因为我在路上有空间吗?我试过在输入文件路径周围使用双引号,或者在文件路径中单个\或单个/,它给了我同样的错误。感谢。
答案 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");
也可以。您可以在相关帖子here和here中详细了解此问题。
然而,安全的变体只是使用inScanner.nextLine();
而不是分隔符模式和next();
,所以你应该坚持这一点,因为它完全是为了这个目的而制作的,正则表达式很难掌握。