2 回答
TA贡献1765条经验 获得超5个赞
首先,在您的根/工作目录(在您的情况下是包含您的项目的文件夹)中,创建一个名为“menus”的文件夹,您可以在此处存储所有菜单(以便您可以玩多文件输入)。
其次,将您的 FastFoodMenu.csv 文件移动到该菜单文件夹。该FastFoodMenu.csv相对路径现在应该是这样的:OrderFastFood\menus\FastFoodMenu.csv。
第三,从系统属性中获取您的工作目录。这是您的程序在其中运行的文件夹。然后,获取对菜单文件夹的引用(文件对象)。
最后,获取对菜单文件夹中相关文件的引用。当您进行多文件阅读(在某些时候,多文件夹阅读)时,您会希望将菜单文件夹中的文件作为列表获取,这就是为什么我说只获取菜单文件夹,因为它是自己的引用(或者只是获取没有对父级又名“\menus\”的独立引用的文件)。
所以你的代码应该是这样的:
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()
}
}
这都是伪代码,但这至少应该让你开始。确保使用 BufferedInputStream 以提高效率,并且在读取文件时,始终将它们传递到 FileInputStream 中。这比使用 Scanner 类要好得多。我还应该提到,在创建 File 对象时,您实际上并不是在创建文件。您正在做的是创建一个对象,为其提供您希望它拥有的数据(例如它是否是一个文件夹,如果是,您希望它拥有哪些子文件/文件夹,它是否受保护)与否,隐藏与否等),然后实际告诉系统用其他所有内容创建文件。
TA贡献1859条经验 获得超6个赞
您的 csv 文件可能位于错误的位置。您只是指定文件名,这是一个相对路径。
相对路径始终针对应用程序的工作目录进行解析,而不是针对源文件所在的目录。
要解决此问题,您可以
将文件移动到真正的工作目录。
使用绝对路径(不推荐!)
将数据文件的文件夹指定为程序参数或在配置文件中(在您的工作目录中)
将文件放在应用程序的类路径中,并通过 classloader 从那里加载它们。请注意,类路径中的文件通常与应用程序打包在一起,因此用户不易修改,因此如果用户必须更改文件,则此解决方案不起作用。
添加回答
举报