【问题标题】:File not found altough it exists (Java)尽管存在文件但找不到文件(Java)
【发布时间】:2018-04-19 07:24:52
【问题描述】:

我正在尝试从 Java 代码中读取 javascript 文件内容。这是我的代码:

 String javascript = "";
 URL url = getClass().getResource("/elementController.js");
 System.out.println(url.toString());
 try {
     Scanner sc = new Scanner(new File(url.getPath()));
     while (sc.hasNext()) {
         javascript += sc.nextLine() + "\n";
     }
     sc.close();

     } catch (Exception e) {
         e.printStackTrace();
     }

System.out.println 打印以下内容: 文件:/C:/Users/J%c3%bcesse/IdeaProjects/JavaFxProject/target/classes/elementController.js

由于此代码执行,我得到以下堆栈跟踪:

java.io.FileNotFoundException: C:\Users\J%c3%bcesse\IdeaProjects\ThesisProject\target\classes\elementController.js (The system cannot find the path specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.util.Scanner.<init>(Scanner.java:611)
at gui.WebViewWindow$MyBrowser.<init>(WebViewWindow.java:82)
at gui.WebViewWindow.display(WebViewWindow.java:58)

但是当我转到 javascript 文件所在的目录时,我可以看到它就在那里。目录图片:

我不知道为什么会出现此错误,即使该文件存在于那里。 有什么建议吗?

【问题讨论】:

  • 尝试完整路径
  • 你不能仅仅因为你有一个名为StringString 将这个问题标记为javascript ;)
  • 其标记为 java,
  • URL 不是文件名,资源也不是文件。使用 URL 的输入流。
  • @SyedBaryalay 我编辑了帖子并修复了它:P

标签: java resources java-io


【解决方案1】:

字符 ü 正在转换为 URL 格式的 %c3%bc。但是,当您尝试将该路径用作文件输入的常规文件路径时,不是打开 URL 输入流,%c3%bc 的反向解码不会发生,并且文件名不匹配,因此 @987654324 @。

【讨论】:

  • 尽管@EJP 的答案是一个解决方案,但我也赞成这个解决方案,因为对异常字符转换的解释。感谢您的帮助。
【解决方案2】:

URL 不是文件名,资源也不是文件。由于这两个原因,您不能在其上使用FileInputStream。一旦资源被打包到你的 JAR 文件中,整个方案就会崩溃。您需要使用资源的输入流:

URL url = getClass().getResource("/elementController.js");
System.out.println(url.toString());
try {
    Scanner sc = new Scanner(url.openStream());

由于您只阅读行,实际上没有充分的理由使用Scanner:您不妨使用BufferReader

【讨论】:

  • 是的。这是一个很好的解释。我设法通过使用带有新文件(“完整路径”)的完整路径来使其工作,但我也想了解包装(我的 jar 的分发)。这段代码 sn-p 似乎可以解决问题。我想我需要让这个文件系统的东西对我更清楚。
  • 就这么简单:JAR 文件不是文件系统。
  • @EJP 有了路径api,就可以了。
  • @killjoy OP 使用的 API 不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
相关资源
最近更新 更多