文件I / O基础知识

时间:2014-03-27 04:00:40

标签: java file-io

我在学校编程实验室工作,但我已经陷入困境。这本书在教授如何正确格式化I / O方面没有太大帮助,或者至少我没有正确理解它。我需要一些帮助继续下一步,但这是我应该制作的程序的全部要求:

  

酒店销售人员在文本文件中输入销售。每行包含   以下用分号分隔:客户端的名称,   售出的服务(如晚餐,会议,住宿等),   销售金额以及该活动的日期。写一个程序   读取此类文件并显示每项服务的总金额   类别。如果文件不存在或格式不正确,则显示错误   不正确。除了列出的程序规范,您的   程序应该打印结果,并将结果汇​​总到a   单独的输出文件。

input.txt示例:

  

Elmer Fudd;住宿; 92.00; 11-01-2014

     

Elmer Fudd; Conference; 250.00; 11-02-2014

     

Daffy Duck;晚餐; 19.89; 2014年2月11日

     

Daffy Duck;会议; 275.00; 11-02-2014

     

米老鼠;晚餐; 22.50; 2014年2月11日

     

Mickey Mouse; Conference; 275.00; 11-02-2014

我目前仍在坚持弄清楚如何正确加载和格式化文件,我认为我做得对,但后来我的教授建议将每个文件分解为自己的行,但我的任何地方都没有本书清楚地告诉我们该如何做到这一点。为了清楚起见,我不是在寻找编码奇迹,我只是希望有人帮助指导我正确的方向,以便我接下来要做什么。在一个非常详细的指南中处理这种情况可能是更好的方法吗?没什么好看的。提前谢谢,这是我现在的代码。

import java.util.*;
import java.io.*;
public class Sales
{
    public static void main(String[] args) throws FileNotFoundException
    {
            File inputFile = new File("input.txt");
            Scanner in = new Scanner(inputFile);
            PrintWriter out = new PrintWriter("output.txt");
            double dinnerTotal = 0;
            double conferenceTotal = 0;
            double lodgingTotal = 0;
            Scanner lineScanner = new Scanner(inputFile);
            lineScanner.useDelimiter(";");
            while (lineScanner.hasNext())
            {
                String line = in.nextLine(); //Here's where I'm really stuck
                System.out.print(line); //Not to say I'm not stumped all over.
            }
            in.close();
            out.close();
            lineScanner.close();
    }
}

杰森说,我现在就在这里:

import java.util.*;
import java.io.*;
public class Sales
{
    public static void main(String[] args) throws FileNotFoundException
    {
        File inputFile = new File("input.txt");
        Scanner in = new Scanner(inputFile);
        PrintWriter out = new PrintWriter("output.txt");
        double dinnerTotal = 0;
        double conferenceTotal = 0;
        double lodgingTotal = 0;
        while (in.hasNext())
        {
            String line = in.nextLine();
            String[] parts = line.split(";");
            if(parts[1].equals("Conference")) {
                conferenceTotal += Double.parseDouble(parts[2]);
            } else if(parts[1].equals("Dinner")) {
                dinnerTotal += Double.parseDouble(parts[2]);
            } else if(parts[1].equals("Lodging")) {
                lodgingTotal += Double.parseDouble(parts[2]);
            }
        }
        in.close();
        out.close();
    }
}

1 个答案:

答案 0 :(得分:0)

坚持使用一台扫描仪。

总共阅读每一行,而不是打破';'。

然后使用String.split()在';'处分开文本行分离器。

然后检查第二部分(从零开始的索引)以检索服务类别,并将第三部分中的值添加到相关总数中。

String line = in.nextLine();
String[] parts = line.split(";");
if(parts[1].equals("Conference")) {
    conferenceTotal += Double.parseDouble(parts[2]);
} else if(parts[1].equals("Dinner")) {
    dinnerTotal += Double.parseDouble(parts[2]);
} else if(parts[1].equals("Lodging")) {
    lodgingTotal += Double.parseDouble(parts[2]);
}