当前位置: 首页 > 面试题库 >

从文本文件读取数据并创建一个对象

严斌
2023-03-14
问题内容

我需要一些帮助:我正在用Java进行超市仿真,但是有一个问题,我有一个文本文件(Stock.txt),例如,我在上面有所有的超市库存:

  • 0-面包巧克力蛋糕-$ 12.5-250
  • 1-Meat-Premium Steak- $ 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或任何其他结构甚至都不是选择:(


问题答案:

对于a来说Scanner,读取数据是一项很好的工作。就无法像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的飞行花名册模拟。名册将容纳25名乘客,其中22名来自文本文件(passengerlist.txt)。对于每个乘客,有3个必需的数据点;姓名、座位等级和座位号和2个可选数据点数常旅客号码和常旅客点数。每个乘客都在自己的线路上,每个数据点都用逗号隔开。例如: 我有这个类,到目前为止还有构造函数: 我需要做的是从文本文件中读取每一行并创建数组,即使第一个look行

  • 档案员。txt包含两类员工的详细信息,即月薪和小时津贴。如果是月薪员工,则该文件包含名字、姓氏、性别、职级、类型和基本工资,如果是小时薪员工,则包含小时工资和工作小时数。该文件的示例如下所示: 约翰·史密斯M经理每月45000.00 Sunil Bates M高级每小时700.00 45 梁爱娃F警官每月30500.00 我要写一个程序,会看每个员工,计算奖金占基本工资的百分比,对于一个按小时计酬

  • 问题内容: 无论如何,我可以写到tempfile并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command / tmp / some-temp-file。 提前谢谢了。 问题答案: 如果需要带有名称的临时文件,则必须使用该功能。然后就可以使用了。有关详细信息,请阅读 http://docs.python.org/library/tempfile.html。

  • 我想创建一个应用程序,每天从一个文件夹中读取一次多个xml文件,然后读取它们并提取数据并构建一个新的xml文件,我想知道哪个选项更适合这种情况: 使用Spring批处理读取并处理所有文件,然后写入新文件

  • 问题内容: 我正在尝试从.Net创建一个Zip文件,该文件可以从Java代码读取。 我已经使用SharpZipLib创建了Zip文件,但是如果生成的文件根据#ZipLib库的CheckZip函数是有效的,并且可以通过WinZip或WinRar成功解压缩,则在尝试使用Java对其进行解压缩时总是会收到错误消息Java中的.Utils.Zip类。 问题似乎出在SharpZipLib写的错误标题中,我还

  • 我在Eclipse中有一个简单的maven项目。应用程序包含文件:src/main/Resources/test.txt.我想读取文件并将其写入输出。它在Eclipse中工作,但在创建jar文件后不能从命令行。如何配置项目以两种方式工作。我错在哪里?不正确的jar文件、java代码、清单、maven配置? 应用程序结构: 应用程序结构 运行: 错误: Java代码: pom.xml: fileRe