我是新来的,所以如果我在提问过程中犯了错误,请原谅。我在过去的一个半星期里研究了我的问题,但还没有找到我要找的东西(尽管我觉得答案非常接近)。我是一名学生,一直在使用 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();
}
}
最佳答案
假设您只想输出添加加薪金额后的工资金额。
您可以编写一个 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/