编写Java程序以汇总输入文件中的数据并输出报告

时间:2014-04-05 07:30:21

标签: java input switch-statement

我需要帮助编写Java程序来汇总输入文件sprocketorders.txt中的数据并输出类似于下面的报告:

                                Spacely Sprockets
                         Taking Sprockets into the Future 
                              Sales Summary Report
            Sprocket Number                          Total Quantity Sold
                 1                                           90
                 2                                           155
                 3                                           50
                 4                                           300
                 5                                           100  

此图表中的数据来自我上面命名的.txt文件。此txt文件中包含的信息如下:

 3   50
 2   20
 2   100
 5   15
 1   90
 5   85
 4   300
 2   35
 3   100

报告需要出现在输出窗口中。

我想使用开关结构。这是我必须用作参考的开关结构片段:

 switch (snum)
    {
        case 1: part1total = part1total + quantity;
            break;
        case 2: part2total = part2total + quantity;
            break;
        case 3: part3total = part3total + quantity;
            break;
        case 4: part4total = part4total + quantity;
            break;
        case 5: part5total = part5total + quantity;
            break;
        default: System.out.println("Bad sprocket number");

    } 

这是我到目前为止确定从文件中输入的代码:

 package spacely.sprockets;

 public class SpacelySprockets
 {

 public static void main(String[] args)
 {
    InputFile orderinfo;
    orderinfo = new InputFile("sprocketorders.txt");

 }
 }

如何使用switch结构汇总txt文件中的数据并输出报告?对我来说,如何从txt文件中输入数据并让它像下面的例子一样显示,这对我没有意义。我真的需要一些坚实的方向。感谢。

3 个答案:

答案 0 :(得分:2)

请尝试以下代码:

请不要忘记更改文件路径

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;

public class FileParsingDemo{

    public static void main(String args[]) {

        try {
            TreeMap<String, String> map = new TreeMap<String, String>();

            BufferedReader br = new BufferedReader(new FileReader(
                    "D:/vijay/temp.txt"));
            String line;
            while ((line = br.readLine()) != null) {
                // process the line.
                // System.out.println(line);

                line = line.trim();
                String number = line.substring(0, line.indexOf(" "));
                String qlty = line.substring(line.lastIndexOf(" "));


                int found=0;
                for (int i = 0; i < map.size(); i++) {

                    if (map.containsKey(number.trim())) {

                        String oldQlt=map.get(number.trim());



                        int totalqlt=Integer.parseInt(oldQlt) + Integer.parseInt(qlty.trim());


                        map.remove(number.trim());
                        map.put(number, ""+totalqlt);
                        found=1;
                        break;

                    }

                }
                if(found==0)
                {
                    map.put(number.trim(), qlty.trim());

                }


            }
            br.close();

            for (Map.Entry<String, String> e : map.entrySet()) {
                //to get key
              System.out.println(e.getKey() +" ---- " + e.getValue());
                //and to get value

            }


        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

更好的方法是:

1,使用HashhMap并将Rocket Number保留为密钥,将Quantity出售为 值。

2.每次从输入文件中读取火箭号,检查地图中是否已存在该号码,如果是,则获取相关数量  到数字,添加现有数量和读取的数量  该文件并将其放回地图中。如果号码不存在,  然后沿着数量将它添加到地图上。

3.按升序排序地图。

4.用一些看似合适的格式将其写回一个新文件。

PS:使用FileReader和BufferedReader读取文件。 FileWriter和BufferdWriter来写文件。

答案 2 :(得分:0)

使用包装文件阅读器的缓冲读卡器:

BufferedReader sprocketFileReader = new BufferedReader(
                                      new FileReader("myFile.txt")
                                    );

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

  • 使用BufferedReader的readLine方法

    逐行读取文件
    while ( ( line = sprockFileReader.readLine() ) !=null) {...}
    
  • 使用String.split将数字与值

  • 分开
  • Integer.parseInt()将值从String转换为int
  • String.format与System.out.println一起生成您想要的输出。

您可能还想查看try with resouces以了解正确的流处理。