【问题标题】:System can't find path系统找不到路径
【发布时间】:2018-03-16 08:07:38
【问题描述】:

尝试通过阅读输入等基本功能来练习 Java。

我正在尝试解析movies-sample.txt,发现于:

C:\University\BigDataManagement\Data-Mining\hw1\src\main\resources\movies-sample.txt

尝试从

联系movies-sample.txt
C:\University\BigDataManagement\Data-Mining\hw1\src\main\java
   \univ\bigdata\course\MoviesReviewsQueryRunner.java

使用找到的答案here 了解如何逐行解析大文件。

File file = new File("../../../../../resources/movies-sample.txt");

我收到以下错误:

系统找不到指定的路径

鉴于以上两条路径,我做错了什么?

【问题讨论】:

  • 您做错的事情是 Java 不是一种脚本语言,它不会从您的 class 所在的位置运行,并且它当然不会运行从您的来源所在的位置。只需使用完整路径。
  • 您的主目录不是文件的路径,而是您的 src 所在的文件夹。所以它是 C:\University\BigDataManagement\Data-Mining\hw1 (免责声明:并非总是如此,根据您运行应用程序的方式,您的家可能会有所不同!)
  • @Ben 这应该是答案 ;)
  • 如果它是一个网络应用程序,那么 resources 文件夹是你的根元素,否则它将是 src 如上所述。所以你可以通过文件名直接访问文件:new File("movies-sample.txt");
  • @Flocke File 不适用于不透明的路径,虽然您的解决方案可以在本地运行代码,但一旦打包代码,它就会中断。这就是ClassLoader.getResourceAsStream 的用途。

标签: java file path


【解决方案1】:

如果是 Web 应用程序,则 resources 文件夹是您的根元素,否则它将是 cmets 中提到的 src 文件夹。

在您的情况下,当您正在编写一个独立的 Java 程序并且您的文件位于 resources 文件夹中时,您可以使用 CLassLoader 将文件作为流读取。

这应该是你的代码:

ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream("movies-sample.txt");

然后你就可以逐行读取is流了。

【讨论】:

  • 感谢您的帮助,使用BufferedReader br = new BufferedReader(new InputStreamReader(is));我终于可以处理每一行了。
  • @TonyTannous 太好了,很高兴它有帮助。
【解决方案2】:

如果您直接从命令行运行程序,则路径必须与您的当前目录相关。

如果您从 IDE 运行程序,则 runnin 程序的当前目录取决于 IDE 及其配置方式。

你可以用System.getProperty("user.dir")判断当前目录是什么

无论如何,在应用程序中硬编码路径总是一件坏事,因为您无法确定从何处启动运行。要么:

  • 它是一个用户资源,那么它的路径必须以某种方式输入(在 GUI 应用中打开...
  • 它是应用程序正确运行所需的资源,应该以某种方式嵌入到应用程序本身中(查找资源包)
  • 它是一种可选外部资源(例如配置文件,或配置文件中指定的路径),它的位置应该以某种方式计算。

【讨论】:

    猜你喜欢
    • 2019-02-27
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2011-02-23
    • 2018-12-12
    相关资源
    最近更新 更多