我需要帮助编写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文件中输入数据并让它像下面的例子一样显示,这对我没有意义。我真的需要一些坚实的方向。感谢。
答案 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将数字与值
您可能还想查看try with resouces以了解正确的流处理。