2 回答

TA貢獻1765條經(jīng)驗 獲得超5個贊
首先,在您的根/工作目錄(在您的情況下是包含您的項目的文件夾)中,創(chuàng)建一個名為“menus”的文件夾,您可以在此處存儲所有菜單(以便您可以玩多文件輸入)。
其次,將您的 FastFoodMenu.csv 文件移動到該菜單文件夾。該FastFoodMenu.csv相對路徑現(xiàn)在應(yīng)該是這樣的:OrderFastFood\menus\FastFoodMenu.csv。
第三,從系統(tǒng)屬性中獲取您的工作目錄。這是您的程序在其中運行的文件夾。然后,獲取對菜單文件夾的引用(文件對象)。
最后,獲取對菜單文件夾中相關(guān)文件的引用。當您進行多文件閱讀(在某些時候,多文件夾閱讀)時,您會希望將菜單文件夾中的文件作為列表獲取,這就是為什么我說只獲取菜單文件夾,因為它是自己的引用(或者只是獲取沒有對父級又名“\menus\”的獨立引用的文件)。
所以你的代碼應(yīng)該是這樣的:
public void getMenu() {
final File workingDir = File(System.getProperty("user.dir"));
final File menusDir = File(workingDir, "menus");
final File fastFoodMenu = File(menusDir, "FastFoodMenu.csv");
try {
final FileInputStream fis = new FileInputStream(fastFoodMenu);
final BufferedInputStream bs = new BufferedInputStream(fis);
while((l = bs.readLine()) != null) {
System.out.println(l);
}
} catch(FileNotFoundException e) {
System.out.println(e.getMessage());
e.printStackTrace()
}
}
這都是偽代碼,但這至少應(yīng)該讓你開始。確保使用 BufferedInputStream 以提高效率,并且在讀取文件時,始終將它們傳遞到 FileInputStream 中。這比使用 Scanner 類要好得多。我還應(yīng)該提到,在創(chuàng)建 File 對象時,您實際上并不是在創(chuàng)建文件。您正在做的是創(chuàng)建一個對象,為其提供您希望它擁有的數(shù)據(jù)(例如它是否是一個文件夾,如果是,您希望它擁有哪些子文件/文件夾,它是否受保護)與否,隱藏與否等),然后實際告訴系統(tǒng)用其他所有內(nèi)容創(chuàng)建文件。

TA貢獻1859條經(jīng)驗 獲得超6個贊
您的 csv 文件可能位于錯誤的位置。您只是指定文件名,這是一個相對路徑。
相對路徑始終針對應(yīng)用程序的工作目錄進行解析,而不是針對源文件所在的目錄。
要解決此問題,您可以
將文件移動到真正的工作目錄。
使用絕對路徑(不推薦?。?/p>
將數(shù)據(jù)文件的文件夾指定為程序參數(shù)或在配置文件中(在您的工作目錄中)
將文件放在應(yīng)用程序的類路徑中,并通過 classloader 從那里加載它們。請注意,類路徑中的文件通常與應(yīng)用程序打包在一起,因此用戶不易修改,因此如果用戶必須更改文件,則此解決方案不起作用。
添加回答
舉報