java - Java - 嵌套 For 循环 - 为每个 System.out.println 附加到文件的更好方法
问题描述
我正在使用下面的代码来生成一些完成工作的测试数据。这里没有问题。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class GenerateTestData {
public static void main(String[] args) throws IOException {
File outfile = new File("dbscript_output.sql");
if (outfile.exists()) {
outfile.delete();
}
int totalCluster = 2;
int totalAgency = totalCluster * 10;
int totalProgramArea = totalAgency * 20;
int totalUsers = totalProgramArea * 100;
for (int numCluster = 1; numCluster <= totalCluster; ++numCluster) {
System.out.println("\nCluster__________________________" + numCluster);
writeToFile("Cluster__________________________" + numCluster);
for (int numAgency = 1; numAgency <= totalAgency; ++numAgency) {
System.out.println("\n\tCluster_" + numCluster + "_Agency_" + numAgency);
writeToFile("\n\tCluster_" + numCluster + "_Agency_" + numAgency);
for (int numProgramArea = 1; numProgramArea <= totalProgramArea; ++numProgramArea) {
System.out.println("\n\t\tAgency_" + numAgency + "_ProgramArea_" + numProgramArea);
writeToFile("\n\t\tAgency_" + numAgency + "_ProgramArea_" + numProgramArea);
for (int numUser = 1; numUser <= totalUsers; ++numUser) {
System.out.println("\n\t\t\tAgency_" + numAgency + "_" + "ProgramArea_" + numProgramArea
+ "_User_" + numUser);
writeToFile("\n\t\t\tAgency_" + numAgency + "_" + "ProgramArea_" + numProgramArea
+ "_User_" + numUser);
}
}
}
}
}
private static void writeToFile(String data) throws IOException {
File file = new File("dbscript_output.sql");
FileWriter fr = new FileWriter(file, true);
BufferedWriter br = new BufferedWriter(fr);
br.write(data);
br.close();
fr.close();
}
}
问题:有没有更好的方法来实现它?Java 7/8/11 有更好的 API 吗?我对使用 Java 的任何更短/更智能的方式持开放态度。此处显示的示例只是几个元素。我有 16 个实体,我必须为其准备测试数据,并且它们都是连接的(相关的)。谢谢。
更新
请允许我重新提出这个问题。
使用纯 Core Java 1.8+ 是否有任何更短/更智能的方法来实现上述目标?我可以在哪里加入(合并)“for”循环和“writeToFile”?(可能在一个班轮中?)感谢大家的帮助。
解决方案
正如我们上面提到的同事,您可以使用以下资源尝试(因此您不必关闭每个输入流)。您还可以缩短/更改带有流的嵌套 for 循环,但这不是更清晰的解决方案,您必须对其进行改进。
public class GenerateTestData {
public static void main(String[] args) throws IOException {
File outfile = new File("dbscript_output2.sql");
if (outfile.exists()) {
outfile.delete();
}
int totalCluster = 2;
int totalAgency = totalCluster * 10;
int totalProgramArea = totalAgency * 20;
int totalUsers = totalProgramArea * 100;
IntStream.range(0, totalCluster).forEach(numCluster->{
writeToFile("Cluster__________________________" + numCluster);
IntStream.range(0, totalAgency).forEach(numAgency->{
writeToFile("\n\tCluster_" + numCluster + "_Agency_" + numAgency);
IntStream.range(0, totalProgramArea).forEach(numProgramArea->
IntStream.range(0,totalUsers).forEach(numUser->{
writeToFile("\n\t\t\tAgency_" + numAgency + "_" + "ProgramArea_" + numProgramArea
+ "_User_" + numUser);
}));
});
});
}
private static void writeToFile(String data) {
File file = new File("dbscript_output2.sql");
try(FileWriter fr = new FileWriter(file, true);
BufferedWriter br = new BufferedWriter(fr)) {
br.write(data);
System.out.println(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
推荐阅读
- dolphindb - python-api 和 DolphinDB 服务器之间的连接错误
- bash - 在 Makefile 中使用通配符和 ifneq
- xml - 有没有办法在 NiFi 中删除 XML 标记名称属性
- python - 我们怎样才能得到一个情节箱线图背后的不同统计数据?
- visual-studio-2019 - Visual Studio 2019 类下拉菜单在选择后立即自动同步
- c++ - 为什么我的 hello world 程序占用了 883KB?
- python - 为什么**uwsgi**中的一些工人从“app:-1”获得500,其他人完全正常
- node.js - nodejs - 如何防止exif图像自动旋转
- python - 是否有 asyncio 的 `call_at` 或 `call_later` 对于 anyio 的等价物?
- node.js - 在 MongoDB 中通过对象 id 抓取另一个对象内部的对象