在Java中,如何从循环写入同一行

在Java中,如何从循环写入同一行,java,Java,我编写了以下代码,以在文本文件中写入一行,通过使用循环递增内容。问题是,我使用的方法是将每个增量写入新行,而不是追加 for (int d = 10; d >= 1; d--) { Path path = Paths.get("ScalModel.txt"); List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8); int position = 75;

我编写了以下代码,以在文本文件中写入一行,通过使用循环递增内容。问题是,我使用的方法是将每个增量写入新行,而不是追加

for (int d = 10; d >= 1; d--) {        
    Path path = Paths.get("ScalModel.txt");
    List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);

    int position = 75;
    String extraLine = "MainAttack -OR-> {AttackNode" + d + "}";

    lines.add(position, extraLine);
    Files.write(path, lines, StandardCharsets.UTF_8); 
} 
我得到的是:

MainAttack -OR-> {AttackNode1}
MainAttack -OR-> {AttackNode2}
MainAttack -OR-> {AttackNode3}
MainAttack -OR-> {AttackNode4}
MainAttack -OR-> {AttackNode5}
MainAttack -OR-> {AttackNode6}
MainAttack -OR-> {AttackNode7}
MainAttack -OR-> {AttackNode8}
MainAttack -OR-> {AttackNode9}
MainAttack -OR-> {AttackNode10}

如何修改代码以获得预期结果?

尝试使用字符串构建来构建字符串,然后一次性保存

StringBuilder sb = new StringBuilder();
sb.append("MainAttack -OR-> {");
int position = 75;
for (int d = 1; d <= 10; d++) {
    if(d!=10)
        sb.append("AttackNode" + d + ", ");
    else
        sb.append("AttackNode" + d + " ");
}
sb.append("}");
Path path = Paths.get("ScalModel.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
lines.add(position, sb);
Files.write(path, lines, StandardCharsets.UTF_8); 
StringBuilder sb=新建StringBuilder();
某人附加(“主攻-或->{”);
int位置=75;

对于(int d=1;d,以下是一个简单的例子:

public static void main(String[] args) throws IOException {

        Path path = Paths.get("ScalModel.txt");
        try {
            String initialText = "MainAttack -OR->";
            for (int d = 1; d <= 10; d++) {
                initialText += " {AttackNode" + d + "}";
            }
            byte[] bytes = initialText.getBytes();
            Files.write(path, bytes);
        } catch (IOException ioE) {
            System.err.println("JVM reported an error! Take a look: " + ioE);
        }

    }
publicstaticvoidmain(字符串[]args)引发IOException{
Path Path=Path.get(“ScalModel.txt”);
试一试{
字符串initialText=“maintack-或->”;

对于(int d=1;d,在循环内部有很多指令,必须放在循环外部

Path path = Paths.get("ScalModel.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);    

int position = 75;
String extraLine = "MainAttack -OR-> {";

for (int d = 10; d >= 1; d--) {        
    extraLine += "AttackNode"+d;
    if(d==1) extraLine += "}";
    else extraLine += ",";
}

lines.add(position, extraLine);
Files.write(path, lines, StandardCharsets.UTF_8); 
Path Path=Path.get(“ScalModel.txt”);
列表行=Files.readAllLines(路径,StandardCharsets.UTF_8);
int位置=75;
字符串extraLine=“maintack-OR->{”;
对于(int d=10;d>=1;d--){
外线+=“攻击节点”+d;
如果(d==1)外线+=“}”;
else外线+=“,”;
}
行。添加(位置、外线);
写入(路径、行、标准字符集.UTF_8);

如果您按照自己的方式进行操作,那么在得到答案之前,您正在读写文件10次。

除了构建它之外,您忘了在任何地方使用
StringBuilder
sb
。在
文件中,将字符集指定为
UTF\u 8
是过时的。readAllLines
文件
类将始终使用根据规范,se
UTF_8
作为默认值(与旧的
文件
类相反)。
Path path = Paths.get("ScalModel.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);    

int position = 75;
String extraLine = "MainAttack -OR-> {";

for (int d = 10; d >= 1; d--) {        
    extraLine += "AttackNode"+d;
    if(d==1) extraLine += "}";
    else extraLine += ",";
}

lines.add(position, extraLine);
Files.write(path, lines, StandardCharsets.UTF_8);