2

我正在尝试创建一个餐厅系统,该系统将从菜单中创建食品等。

我很快就会学习 jdbc,我相信这会有所帮助,但现在我认为最简单的方法也是在记事本中创建我的菜单。

什么是排列和读取记事本文件(如菜单)的最佳方式。

请尽量说清楚,我不完全确定所有术语。

这个看起来很有希望,但我不知道发生了什么。

///////////////////////////////////////// //////////////////

我仍然坚持这一点。

我决定也制定一个单独的方法来读取文件。

我尝试了我能想到的每一个例子。有人可以向我展示一个如何定义文件类路径的示例。

如果我输入 menu.txt 它只是不起作用。

4

6 回答 6

7

看看Sun 的 Java 教程

于 2010-01-13T13:58:34.610 回答
2

http://java.sun.com/j2se/1.5.0/docs/api/java/io/BufferedReader.html#readLine()

于 2010-01-13T13:52:27.690 回答
2

最简单的选择是简单地使用Apache Commons IO JAR 并导入 org.apache.commons.io.FileUtils 类。使用这个类有很多可能性,但最明显的是如下;

List<String> lines = FileUtils.readLines(new File("untitled.txt"));

就这么容易。

“不要重新发明轮子。”

我可以问一下您将从这个文件中读取什么样的内容/数据,因为可能还有其他(甚至更简单)的可能性?

IE

特性

foo="酒吧"

字符串标记

foo,bar,fu,baz

如果您需要我提到的任何流程的更多详细信息,请告诉我。

于 2010-01-13T14:00:19.097 回答
1

“记事本”文件只是文本文件,因此您只需使用 Reader 实例将其读入即可。由于记事本支持 windows Unicode,您可能需要指定一个字符集“UTF-16LE”。

于 2010-01-13T13:54:07.097 回答
1

基本思想是创建一个文件阅读器对象

FileReader fr = new FileReader('file.txt');

然后逐行遍历文件,解析每一行并将内容保存到一些内部数据存储(数组,哈希映射)。

您所拥有的示例中的 while 循环就是这样做的。该FileReader课程将为您处理行尾,并null在没有更多行可读取时返回。在 while 循环中需要做的是解析每一行并将不同的数据位(课程名称、价格等)彼此分开。

编辑:要解析行,您将执行以下操作。while 循环中的内容取决于您如何格式化菜单文件。以下假设菜单文件包含价格和课程名称(按此顺序),每行用逗号分隔。

12.95$,Penne ala Arabiata
8.15$,Fish Soup

请注意,如果您这样做,您不能在价格中使用逗号。您当然可以使用分号而不是逗号作为数据字段之间的分隔符。数据字段的数量当然也取决于您。

String line = "";
// read lines from file
while ((line = fr.readLine()) != null) {
    // parse each line
    tokens = line.split(",");
    String price = tokens[0];
    String courseName = tokens[1];
    // extract all other information
}

在您的最终代码中,您需要将数据字段保存到某种结构中,而不仅仅是从文件中提取它们。需要注意的另一件事是,由于美元符号,价格是字符串而不是数字。如果您希望对价格进行任何计算,您当然需要使用parseFloat()或将其转换为数字parseDouble()

当然,如果您确实使用 csv(逗号分隔值)格式,最好使用 csv 库为您进行解析,而不是自己编写解析器。

http://opencsv.sourceforge.net/

于 2010-01-13T13:57:54.203 回答
1
String filename = "myfile.txt";
BufferedReader reader = new BufferedReader(new FileReader(filename));

try{
  String line;
  //as long as there are lines in the file, print them
  while((line = reader.readLine()) != null){ 
    System.out.println(line);
  }
} catch (IOException e) {
  e.printStackTrace();
}
于 2010-01-13T13:58:39.680 回答