我的csv文件与其他所有文件的路径相同。现在,当我尝试创建File对象时:
public void getMenu() {
File fileMenu = new File("FastFoodMenu.csv");
try {
Scanner inputStream = new Scanner(fileMenu);
while (inputStream.hasNext()) {
String data = inputStream.next();
System.out.println(data);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(FileHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
它抛出一个FileNotFoundException
。
项目中所有文件的绝对路径为:
C:\ Users \ kenyo \ Documents \ NetBeansProjects \ OrderFastFood \ src \ fastfoodorderingsystem
我也检查了几次这个名字。 fileMenu.exists()
返回false。
答案 0 :(得分:2)
首先,在您的根目录/工作目录中(在您的情况下,这是包含项目的文件夹),创建一个名为“ menus”的文件夹,您可以在其中存储所有菜单(以便您可以播放多文件输入)
第二,将FastFoodMenu.csv文件移动到该菜单文件夹。
FastFoodMenu.csv相对路径现在应如下所示:OrderFastFood\menus\FastFoodMenu.csv
。
第三,从“系统”属性中获取您的工作目录。这是程序所在的文件夹。然后,获得对菜单文件夹的引用(文件对象)。
最后,在菜单文件夹中获取有关文件的引用。当您开始多文件阅读(有时是多文件夹阅读)时,您将想要将菜单文件夹中的文件作为列表获取,所以这就是为什么我说只获取menus文件夹的原因引用(或者只获取没有对父文件名“ \ 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对象时,您实际上并不是在创建文件。您正在做的是创建对象,向其提供所需的数据(例如是否为文件夹,如果是,则为该对象提供哪些子文件/文件夹,是否受保护)或不隐藏,是否隐藏等),然后实际告诉系统使用其他所有文件创建文件。
答案 1 :(得分:0)
您的csv文件可能在错误的位置。您只是在指定文件名,这是一个相对路径。
相对路径始终根据应用程序的工作目录而不是源文件所在的目录进行解析。
要解决此问题,您可以