2012-12-02 148 views
0

我在java中有一個項目,我在其中讀取了一些csv數據。我必須輸入具體路徑。現在我想將這個項目發送給其他人,但他不應該改變路徑信息。他應該能夠運行該項目,而無需更改代碼中的任何內容。Java中csv文件的文件路徑

我已經把csv數據放到我的源文件中,但是當我嘗試使用這個路徑時,我得到一個異常。

BufferedReader in = new BufferedReader(new FileReader("text.csv")); 

Exception while reading csv file: java.io.FileNotFoundException: text.csv (No such file or directory) 

我正在使用IDE eclipse。

+2

如果文件不存在,則不存在。如果其他人不需要使用他們自己的數據,考慮將jar包中的csv文件打包爲資源。 –

+0

並考慮'Class.getResource()' – nullpotent

+0

使用FileReader的方法將假定該文件存在於當前工作目錄中。您可以確保文件確實位於當前工作目錄中;或者,把它打包爲戴夫牛頓提到的;或者確保該文件位於類路徑中的某處並使用getResourceAsStream代替。如果有問題的程序碰巧是一個Web應用程序,最後的方法是推薦的方法,請參閱http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream。 – icey502

回答

0

將該文件放入Java源文件夾的根目錄下,然後確保其文件符合您的類或bin或目標文件夾(其中所有編譯類ar e去)。一旦這樣做,然後如下更改代碼:

InputStream inputStream = 
        getClass().getClassLoader().getResourceAsStream("text.csv"); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 

當你打包爲分發項目,請確保您的text.csv封裝在同一個文件夾,即類文件夾的根目錄。

-1

根據項目的不同,只需讓程序提示用戶輸入CSV文件的文件路徑即可。如果它是命令行程序,請使用System.in來讀取路徑字符串,並用它代替"text.csv"

喜歡的東西:

Scanner input = new Scanner(System.in); 
String path = input.next(); 
BufferedReader in = new BufferedReader(new FileReader(path)); 

我還建議確保文件實際上是在路徑中存在第一,但並踢回友善的信息,而不是僅僅拋出原始異常。

+0

爲什麼downvote? – Ivan

0

我將通過程序參數傳遞的.csv文件的路徑,像這樣:

java MyCsvReader C:\Users\Me\file.csv


,然後通過args訪問傳遞的參數在main方法:

public static void main(String[] args) { 
    if(args.length != 1) { 
     System.out.println("Correct usage: MyCsvReader <CSV path>"); 
     System.exit(1); 
     return; 
    } 

    BufferedReader in = new BufferedReader(new FileReader(args[0])); 
    // ... 
}