Java 如何替换文件中的行(如果是station)

Java 如何替换文件中的行(如果是station),java,file,bufferedreader,printwriter,Java,File,Bufferedreader,Printwriter,我想创建一个文件,如果statment为true,则为该行提供值“1”,如果不是值“0”。开始时,我提供值0,如果为true,则必须替换为“1”。这必须在for循环中,并且每次都按照下面的代码检查station import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.i

我想创建一个文件,如果statment为true,则为该行提供值“1”,如果不是值“0”。开始时,我提供值0,如果为true,则必须替换为“1”。这必须在for循环中,并且每次都按照下面的代码检查station

     import java.io.BufferedReader;
     import java.io.File;
     import java.io.FileReader;
     import java.io.FileWriter;
     import java.io.IOException;
     import java.io.PrintWriter;
     import java.util.logging.Level;
     import java.util.logging.Logger;

     public class Main {
            public static void main(String[] args) {
            File F=new File("D:\\File.txt");
        try {
        F.createNewFile();
        BufferedReader br = new BufferedReader(new FileReader(F));
        PrintWriter pw = new PrintWriter(new FileWriter(F));
        for (int i=0;i<5;i++){
            pw.println(0);
            for ( int j=0;j<10;j++){
               if(i==2)     {   //sample if statment
                   pw.write("1");
                   pw.flush();    }
               if(j==3&&i==3)     {   //sample if statment
                   pw.write("1");
                   pw.flush();    }
                         } 
                  pw.write("\n");
                   }
           pw.close();
           br.close();
           } catch (IOException ex) {
          Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                        }
现在,我从我的代码中得到的是:

              0
              0
              0
              11111111110
              10
  • 为什么执行
    pw.println(0)与外部循环的每次迭代
  • pw.println(0)之间的区别是什么
    pw.write(“1”)

i==2
时,它打印一个
0
和一个新行(如按Enter键)

然后它通过
j
进入内部循环,执行10次。每次因为
i
是2,它都在同一行上打印
1
。这就是为什么你有10个
1

然后它循环到达
i==3
,并打印另一个
0
和一个新行

然后,当内部循环到达
j==3
时,它将打印
1

[编辑]
调试器是你的朋友

欢迎来到堆栈溢出!请拿着这个,四处看看,仔细阅读,尤其是。哦,我的问题有什么问题吗?如果我必须改变什么,告诉我。实际上我在堆栈溢出中搜索,但找不到类似的东西。请注意,在您的代码中,i的任何值都将首先打印零。这就是为什么你的结果包含5个零。只有在j回路内部,才存在打印1的可能性。在j循环中应该使用if-elseif-else结构,并且只有在两个条件都不满足时才打印零。基本上,我的意思是,目前,即使满足条件,也会打印零。到目前为止,它看起来不错,只是你没有问特定的问题。另外,学习使用IDE的调试器(很好!)。然后,您可以一步一步地浏览代码,准确地看到在循环的每次迭代过程中发生了什么。也可以使用System.out.println将值打印到屏幕上。问题,你们用什么IDE开发?我想这应该是一个评论。你真的没有提供答案@Timothy。我相信帮助OP自己找到答案比简单地更正代码更有用。好吧,但是如何在每次Condition为真时替换该行?在开始时,我给每一行0,但基本思想是,如果该行为真,则替换该行。不要在开始时直接写入0。把它放在一个变量中。如果满足条件,请稍后将其更改为1。在每个循环的末尾写入变量。
              0
              0
              0
              11111111110
              10