0
/*
 *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

  }
}
4

3 回答 3

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");

'希望有帮助

于 2012-12-22T23:54:14.720 回答
0

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

于 2012-12-22T19:43:27.903 回答
0

这个问题的答案存在于File 类的 javadocs 中

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

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

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

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

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

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

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

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

于 2012-12-22T20:07:50.660 回答