java - 从文本文件读取数据并创建对象

标签 java bufferedreader readfile stringtokenizer writefile

我需要一些帮助: 我正在 Java 上进行超市模拟,但遇到一个问题,我有一个文本文件 (Stock.txt),其中包含超市的所有库存,例如:

  • 0-面包店-巧克力蛋糕-$12.5-250
  • 1-肉-优质牛排-$2.6-120
  • 2-海鲜-金枪鱼 - $1.2-14
  • ...

其中第一个数字是产品的“id”,接下来是产品所属的部门,第三个是产品名称,接下来是价格,最后一个数字是产品的件数股票有。 我有这门课:

public class Product {
    protected String name;
    protected double price;
    protected String department;
    protected int id;
    protected int stock;
}

所以,基本上我需要做的是从文本文件中读取每一行并创建产品,即对于第一行进行如下操作:

Product product1 = new Product(0,"Bakery","Chocolate Cake", 12.5, 250);     

然后将其添加到数组

Product[0] = product1;

对于文本文件中的所有内容,当运行模拟时,每个客户将购买随机数量的随机产品库存,因此库存数量将会减少。最后,当模拟结束时,程序必须将每个产品的修改量写入同一个文本文件中。

问题是,也许这太容易做到了,但我不知道如何做到这一点,因为自从我开始用 Java 编程以来,用 Java 读写文件对我来说一直是一个真正的问题(我是一个初学者)。 我有一些使用 BufferedReader 和 StringTokenizer 类来读取和创建对象问题的想法,但我不知道如何做到这一点,而且我不知道必须如何解决覆盖问题。 我非常感谢您的帮助!

哦!顺便说一句,我真的只需要使用数组,因此使用 ArrayList 或任何其他结构甚至不是一个选择:(

最佳答案

对于扫描器来说,这是读取数据的好工作。至于无法使用像 ArrayList 这样的集合,您必须自己动态地重新分配数组。

尝试以下操作:

public static void main(String[] args) throws FileNotFoundException {
    Scanner input = new Scanner(new File("Stock.txt"));
    input.useDelimiter("-|\n");

    Product[] products = new Product[0];
    while(input.hasNext()) {
        int id = input.nextInt();
        String department = input.next();
        String name = input.next();
        double price = Double.valueOf(input.next().substring(1));
        int stock = input.nextInt();

        Product newProduct = new Product(name, price, department, id, stock);
        products = addProduct(products, newProduct);
    }

    for (Product product : products) {
        System.out.println(product);
    }
}

private static Product[] addProduct(Product[] products, Product productToAdd) {
    Product[] newProducts = new Product[products.length + 1];
    System.arraycopy(products, 0, newProducts, 0, products.length);
    newProducts[newProducts.length - 1] = productToAdd;

    return newProducts;
}

public static class Product {
    protected String name;
    protected double price;
    protected String department;
    protected int id;
    protected int stock;

    private static NumberFormat formatter = new DecimalFormat("#0.00");

    public Product(String n, double p, String d, int i, int s) {
        name = n;
        price = p;
        department = d;
        id = i;
        stock = s;
    }

    @Override
    public String toString() {
        return String.format("ID: %d\r\nDepartment: %s\r\nName: %s\r\nPrice: %s\r\nStock: %d\r\n", 
                id, department, name, formatter.format(price), stock);
    }
}

结果:

ID: 0
Department: Bakery
Name: Chocolate Cake
Price: 12.50
Stock: 250

ID: 1
Department: Meat
Name: Premium Steak
Price: 2.60
Stock: 120

ID: 2
Department: Seafood
Name: Tuna
Price: 1.20
Stock: 14

关于java - 从文本文件读取数据并创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30564462/

相关文章:

java - I/O 从文件中读取对象数据

c# - 从 Amazon s3 流中读取文本

c - 在C代码中读取同一个文件两次

java - Super CSV (Java) - 读取列名中有空格的文件

java - Apache Camel 中的解码 (JSON)

java - Primefaces 可调整大小的遏制

Java mysql - 它向我抛出一个 xml。 jdk/jre问题?

java - 搜索并保存 html 代码中的指定链接

java - 多维数组 bufferedreader

计算文件中的行数 - C