2012-12-22 72 views
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 

    } 
} 
+0

如果你得到一個‘文件不存在’異常試圖打開‘/files/scores.dat’,那麼它是一個安全的賭注,因爲某些原因,「/文件/分.dat「不存在:)。建議:可以在不同的驅動器(C:vs D :)嗎?你是否從.jar執行程序(它會有一個不同的根目錄)?你能想到其他的解釋嗎? – paulsm4

+0

不,文件夾「files」與.class文件位於同一文件中,而scores.dat文件位於該文件夾內。 – Raziel

回答

0

原因可能是您不會有權限打開該文件。 從終端嘗試chmod 755 scores.dat以更改權限並查看錯誤是否仍然存在。

+0

我認爲Raziel反而會獲得Permission Denied,而不是FileNotFound,如果是這樣的話。 – jmort253

+0

@我的經驗jmort253,爪哇拋出一個FileNotFoundException異常,如果用戶沒有權限打開(至少在Windows上)的文件。 –

+0

我同意。對不起,我的錯。 – ravdhaw

0

的回答這個問題存在於javadocs for the File class

For UNIX platforms, the prefix of an absolute pathname is always "/". Relative pathnames have no prefix. The abstract pathname denoting the root directory has the prefix "/" and an empty name sequence.

在代碼中,你有以下幾種:

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

根據文檔,這是一個絕對路徑,這意味着Java正在文件系統的根目錄中尋找名爲「files」的文件夾,然後在該文件夾中查找scores.dat。

如果你不是希望尋找一個文件目錄,是相對於當前目錄下,你需要省略第一/

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

另一種選擇是使用絕對路徑的數據文件,但如果更改項目的位置或將類文件放在JAR文件中,則可能會遇到問題。

嘗試打開你的日誌記錄級別爲DEBUG或ALL,這樣就可以清楚地看到該程序正在試圖尋找。這將幫助您調整您的代碼以定位正確的文件夾。

+0

我試過,雖然,它仍然拋出了同樣的錯誤:FileNotFoundException異常:文件\ scores.dat(系統找不到指定的文件) – Raziel

+0

你把你的日誌記錄級別?這些類中的很多都具有內置的日誌記錄功能,可以通過提高日誌記錄級別來啓用它們。它可能會告訴你係統正在試圖查找文件的位置,這意味着您可以A)將文件移動到它正在查找的位置,或者B)調整文件路徑。希望這可以幫助! – jmort253

+0

那麼我怎樣才能打開日誌級別? – Raziel

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

「希望幫助

+0

第三個問題,我將如何實現該目標,這與執行中的第二個目標有何不同? – Raziel

+0

另外,我不太明白如何實現這些代碼中的任何一個:$ – Raziel

相關問題