【问题标题】:How to give file path as input to Java program in Eclipse如何在 Eclipse 中将文件路径作为 Java 程序的输入
【发布时间】:2017-05-21 20:23:31
【问题描述】:

我有一个 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 中运行这个程序时,我得到了“语法不正确”的错误:

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 的输入中给出这条路径呢?是因为我在路径中有空间吗?我尝试在输入文件路径周围使用双引号,或者在文件路径中使用单个\或单个/,它给了我同样的错误。谢谢。

【问题讨论】:

  • 您可能必须将路径视为用双引号括起来的字符串。也许尝试 "\"C:\\Users\\My Work\\myFile.txt\"" 因为我看到命令提示符的方式会处理目录名称中包含空格的任何路径
  • 刚试过。还是不行。
  • 您 100% 确定您有一个名为“我的工作”的用户?因为这对用户来说似乎是一个非常奇怪的名字。您可以使用该确切路径导航到 cmd/终端中的文件吗?
  • @RAZ_Muh_Taz FileInputStream 只是将一个字符串作为参数,而另一个双引号内没有这样的字符串

标签: java eclipse


【解决方案1】:

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();,所以你一定要坚持下去,因为它正是为此目的而制作的,而且正则表达式很难掌握。

【讨论】:

  • 谢谢。有效。你能告诉我为什么我不能使用 \n 作为分隔符吗?
  • 添加了解释。只需使用nextLine(),它使用换行符作为分隔符。这要容易得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
相关资源
最近更新 更多