Java - 检索文件,计算,输出到另一个文件?

标签 java

我是新来的,所以如果我在提问过程中犯了错误,请原谅。我在过去的一个半星期里研究了我的问题,但还没有找到我要找的东西(尽管我觉得答案非常接近)。我是一名学生,一直在使用 Eclipse 为我的 Java 类(class)完成一项作业。我编写了一段代码,从一个文件中获取信息,在计算中使用它,现在我需要将其输出到另一个文件中。这就是我遇到困难的地方。这是我到目前为止的代码:

import java.util.Scanner;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.NoSuchElementException;
import java.util.ArrayList;

public class Program6 {

    private Scanner input;
    private ArrayList<Double> payRoll = new ArrayList<>();
    public static void main(String[] args)  {

        Program6 myObject = new Program6();

        myObject.openFile();
        myObject.readFile();
        myObject.calculateRecords();
        myObject.closeFile();

    } 

    public void openFile() {
        try {
            input = new Scanner(Paths.get("Program6.txt")); 
        } catch (IOException ioException) {
            System.err.println("Error opening file. Terminating.");
            System.exit(1);
        }
    }

    public void readFile() {
        try {
            while (input.hasNext()) {
                payRoll.add(input.nextDouble());
            }
        } catch (NoSuchElementException elementException) {
            System.err.println("File improperly formed. Terminating.");
        } catch (IllegalStateException stateException) {
            System.err.println("Error reading from file. Terminating.");
        } 
    }
    public void calculateRecords() {
        System.out.printf("%10s%25s%15s%19s", "Before Payroll",
                "Raise Percent",
                "Raise Amount",
                "After Payroll\n");

        double raisePercent;
        double raiseAmount;
        double totalBeforePayroll = 0;
        double totalAfterPayroll = 0;

        for (int i = 0; i < payRoll.size(); i++) {
            if (payRoll.get(i) > 70000) {
                raisePercent = 4;
            } else if (payRoll.get(i) > 50000) {
                raisePercent = 7;
            } else {
                raisePercent = 5.5;
            }
            raiseAmount = payRoll.get(i) * raisePercent / 100;

            System.out.printf("%12.2f%21.1f%18.2f%17.2f%n",
                    payRoll.get(i), raisePercent, raiseAmount, payRoll.get(i) + raiseAmount);

            totalBeforePayroll += payRoll.get(i);
            totalAfterPayroll += payRoll.get(i) + raiseAmount;
        }

        System.out.printf("%nTotal amount of raises: $%,.2f%n",
                totalAfterPayroll - totalBeforePayroll);
        System.out.printf("Average raise percent : %.0f%%",
                (totalAfterPayroll - totalBeforePayroll) * 100.0 / totalBeforePayroll);
        System.out.printf("%nAverage raise amount  : $%,.2f%n",
                (totalAfterPayroll - totalBeforePayroll) / payRoll.size());
    }

    public void closeFile() {
        if (input != null)
            input.close();

    }
} 

enter image description here

最佳答案

假设您只想输出添加加薪金额后的工资金额。

您可以编写一个 void 方法 writeFile(),在其中循环遍历列表并将每个条目附加到一个空文件中。

为此,我将使用 BufferedWriter 类,但您可以自由选择您喜欢的任何类。不过,我将继续使用 BufferedWriter 示例。

因此,我们需要在 writeFile 方法中设置 bufferedwriter。这样做是这样的:

BufferedWriter b = new BufferedWriter(new FileWriter("path here" + System.getProperty("file.separator") + "filename.txt"));

将“此处路径”替换为您要保存文件的位置。一个示例是将其替换为 System.getProperty("user.dir"),这是用户的工作目录。

System.getProperty("file.seperator") 在 Windows 中将是 \。但是使用 System.getProperty("file.separator") 也可以使其在不同的系统上工作。

所以:

BufferedWriter bw = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + System.getProperty("file.separator") + "filename.txt"));

现在您可以循环浏览列表并将每个条目附加到编写器:

for (int i = 0; i < payRoll.size(); i++){
    bw.append(payRoll.get(i));
}

之后,您可以并且应该使用以下方法“关闭”bufferedwriter:

bw.close();

该方法看起来像这样:

BufferedWriter b = new BufferedWriter(new FileWriter("path here" + System.getProperty("file.separator") + "filename.txt"));

for (int i = 0; i < payRoll.size(); i++){
    bw.append(payRoll.get(i));
}
bw.close();

关于Java - 检索文件,计算,输出到另一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125228/

相关文章:

java - 将 javascript 添加到 Tapestry 应用程序的方法是什么?

java - Jackson 来自 kotlin 的自定义 json 序列化 java 原语

java - 从数组中选择随机元素,但唯一

java - 如何在hibernate中从多个sql结果中执行addAll?

java - 使用Java向cmd输入命令

java - cursor.getCount() 使用 rawQuery 返回错误的计数

javascript - Heroku 环境导致 Java/Nashorn/ReactJS 应用程序崩溃

java - 如何在 java 中导入 distcp 包?

java - 为什么 Netbeans 加载 Java 库的顺序有时会导致错误?我该如何避免它?

java - 使用 Jackson 在变量名转换为 JSON 转换中使用斜杠的 POJO