/*
*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 に答える
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");
「それが役立つことを願っています
ファイルを開く権限がないことが原因である可能性があります。アクセス許可を変更するために端末から試し chmod 755 scores.dat
て、エラーがまだ存在するかどうかを確認してください。
この問題に対する答えは、File クラスの javadoc にあります。
UNIX プラットフォームの場合、絶対パス名のプレフィックスは常に「/」です。相対パス名には接頭辞がありません。ルート ディレクトリを示す抽象パス名には、プレフィックス「/」と空の名前シーケンスがあります。
コードには、次のものがあります。
File dataFile = new File("/files/scores.dat");
ドキュメントによると、これは絶対パスです。これは、Java が「files」というファイル システムのルートにあるフォルダーを探し、そのフォルダーで score.dat を探していることを意味します。
代わりに、現在のディレクトリに相対的なファイル ディレクトリを検索することを期待している場合は、最初の を省略する必要があります/
。
File dataFile = new File("files/scores.dat");
もう 1 つのオプションは、データ ファイルへの絶対パスを使用することですが、プロジェクトの場所を変更したり、クラス ファイルを JAR ファイルに配置したりすると、問題が発生する可能性があります。
ログ レベルを DEBUG または ALL に上げて、プログラムがどこを見ようとしているかを正確に確認できるようにしてください。これは、適切なフォルダーをターゲットにするようにコードを調整するのに役立ちます。