文件存在但程序抛出FileNotFoundException

时间:2012-12-22 19:20:52

标签: try-catch filenotfoundexception

/*
 *This program checks type casting from String to int/double from a file
 */

import java.io.*;

import java.lang.String;

public class ConvertingStringsToNums {

  public static void main (String[] args){

    File dataFile = new File("/files/scores.dat");
    FileReader in;
    BufferedReader readFile;
    String score;
    double avgScore, totalScores = 0;
    int numScores = 0;
    //------------------------------------------------------------
    try {
      in = new FileReader(dataFile);
      readFile = new BufferedReader(in);

      while((score = readFile.readLine()) != null) {
        numScores += 1;
        System.out.println(score);
        totalScores += Double.parseDouble(score);
      }
      avgScore = totalScores / numScores;

      readFile.close();
      in.close();
    } catch(FileNotFoundException e) {
      System.err.println("FileNotFoundException: " + e.getMessage());
    } catch (IOException e) {
      System.err.println("IOException: " + e.getMessage());
    } //end try/catch

  }
}

3 个答案:

答案 0 :(得分:1)

1)如果您希望在硬盘驱动器上的绝对文件路径中打开文件:

br = new BufferedReader (
  new FileReader(
    new File ("/files/scores.dat")));

2)如果您希望在相对于启动应用程序的相对路径打开文件:

br = new BufferedReader (
  new FileReader(
    new File ("files/scores.dat")));

3)如果您希望在相对于类文件的相对路径上打开文件(特别是与包和/或从.jar或.war执行):

this.getClass().getResourceAsStream ("files/scores.dat");

'希望有所帮助

答案 1 :(得分:0)

原因可能是你没有权限打开文件。 从终端尝试chmod 755 scores.dat以更改权限并查看错误是否仍然存在。

答案 2 :(得分:0)

此问题的答案存在于javadocs for the File class

  

对于UNIX平台,绝对路径名的前缀始终为“/”。相对路径名没有前缀。表示根目录的抽象路径名具有前缀“/”和空名称序列。

在您的代码中,您有以下内容:

File dataFile = new File("/files/scores.dat");

根据文档,这是一个绝对路径,这意味着Java正在文件系统的根目录中查找名为“files”的文件夹,然后在该文件夹中查找scores.dat。

如果您希望搜索相对于当前目录的文件目录,则需要省略第一个/

File dataFile = new File("files/scores.dat");

另一个选项是使用数据文件的绝对路径,但如果更改项目的位置或将类文件放在JAR文件中,则可能会遇到问题。

尝试将您的日志记录级别调高到DEBUG或ALL,以便您可以准确查看程序尝试查看的位置。这将帮助您调整代码以定位正确的文件夹。