【问题标题】:FileNotFoundException java cannot basic find file while it's thereFileNotFoundException java 在文件存在时无法基本找到文件
【发布时间】:2018-03-22 14:16:06
【问题描述】:

我正在尝试读取包含欧元价格的基本 txt 文件。我的程序应该遍历这些价格,然后用其他价格创建一个新文件。现在,问题是 java 说它找不到第一个文件。

它在完全相同的包中,如下所示:

Java 已经在以下代码处失败:

FileReader fr = new FileReader("prices_usd.txt");

完整代码:

import java.io.*;

public class DollarToEur {
    public static void main(String[] arg) throws IOException, FileNotFoundException {
    FileReader fr = new FileReader("prices_usd.txt");
    BufferedReader br = new BufferedReader(fr);

    FileWriter fw = new FileWriter("prices_eur");
    PrintWriter pw = new PrintWriter(fw);

    String regel = br.readLine();
    while(regel != null) {
        String[] values = regel.split(" : ");
        String beschrijving = values[0];
        String prijsString = values[1];
        double prijs = Double.parseDouble(prijsString);
        double newPrijs = prijs * 0.913;

        pw.println(beschrijving + " : " + newPrijs);
        regel = br.readLine();
    }
    pw.close();
    br.close();

    }
}

【问题讨论】:

  • 路径是相对于你的包结构的根目录,而不是相对于你所在的类。尝试“week5/practicum13/prices_usd.txt”或将你的文件移动到包含的资源文件夹中在项目中或类的根目录中。
  • 可能类文件正在不同的文件夹中执行。尝试找到 DollarToEur.class 并将 txt 文件移到那里。

标签: java file filereader filenotfoundexception


【解决方案1】:

您的文件看起来名为“prices_usd”,而您的代码正在查找“prices_usd.txt”

【讨论】:

    【解决方案2】:

    你需要做几件事:

    1. 将文件直接放在Eclipse中的项目文件夹下。 当您在 Eclipse 中执行代码时,项目文件夹被认为是工作目录。所以你需要把文件放在那里以便Java可以找到它。
    2. 使用.txt extn 正确重命名文件。 从您的屏幕打印来看,该文件似乎没有扩展名,或者可能只是不可见。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      将资源文件(如prices_usd.txt)放在包中是不好的做法。请放在resources/ 目录下。如果直接放在resources/目录下,可以这样访问文件:

      new FileReader(new File(this.getClass().getClassLoader().getResource("prices_usd.txt").getFile()));
      

      但如果你真的有充分的理由把它放在包里,你可以这样访问它:

      new FileReader("src/main/java/week5/practicum13/prices_usd.txt");
      

      但这在您导出项目时不起作用(例如:作为 jar)。

      EDIT 0:当然,您的文件名必须是“prices_usd.txt”,而不仅仅是“prices_usd”。

      编辑 1: 第一个(推荐的)解决方案在 .getFile() 上返回一个字符串,当应用程序在 IDE 中构建/不运行时,它不能直接传递给 new File(...) 构造函数. Spring 有一个解决方案:org.springframework.core.io.ClassPathResource

      只需将此代码与 Spring 一起使用:

      new FileReader(new ClassPathResource("prices_usd.txt").getFile());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-18
        相关资源
        最近更新 更多