Java附加到文本文件的每行末尾

Java附加到文本文件的每行末尾,java,arrays,Java,Arrays,我想在现有文本文件的每行末尾添加一些文本。每次我运行代码时,它都会删除所有内容,但不会向文件中写入/附加任何内容。 非常感谢您的帮助 import java.io.*; public class RandomNumber { public static void main(String[] args) { File dir = new File("C:\\testing"); System.out.println(dir.isDirectory

我想在现有文本文件的每行末尾添加一些文本。每次我运行代码时,它都会删除所有内容,但不会向文件中写入/附加任何内容。 非常感谢您的帮助

import java.io.*;

public class RandomNumber 
{
     public static void main(String[] args) {

         File dir = new File("C:\\testing");
         System.out.println(dir.isDirectory());


         try {
              File file = new File(dir, "Test.txt");
              FileReader fr = new FileReader(file);
              BufferedReader br = new BufferedReader(fr);
              FileWriter fw = new FileWriter(file);
              BufferedWriter bw = new BufferedWriter(fw);

              String s = "Add1,";
              String s2 = "Add2\n";
              String str;

              while((str = br.readLine()) != null) {
              StringBuffer sb = new StringBuffer(str);
              sb.append(s + s2);
              String y = sb.toString();
              System.out.println(sb);
              System.out.println("Appending");
              bw.write(y);
              }

              bw.close();
              System.out.println("Done");


         }catch(IOException e) {}

}
}
不要使用空的捕捉块。出现异常时,应显示一条消息


除非使用RandomAccessFile,否则无法读取和写入同一文件

当您打开要输出的文件时,该文件将被清除,因此没有数据可读取,因此没有数据可写入,因此结果是文件现在为空

如果在“附加”模式下打开文件进行输出,则可以读取文件中的数据(数据将保留在文件中),但所有write语句都附加到原始文件的末尾,因此现在文件中有数据的副本

相反,您的基本逻辑应该是:

  • 从输入文件中读取一行
  • 将文本写入输出文件
  • 读取所有数据后,关闭两个文件
  • 删除输入文件
  • 将输出文件重命名为与输入文件相同的名称
  • 不要使用空的捕捉块。出现异常时,应显示一条消息


    除非使用RandomAccessFile,否则无法读取和写入同一文件

    当您打开要输出的文件时,该文件将被清除,因此没有数据可读取,因此没有数据可写入,因此结果是文件现在为空

    如果在“附加”模式下打开文件进行输出,则可以读取文件中的数据(数据将保留在文件中),但所有write语句都附加到原始文件的末尾,因此现在文件中有数据的副本

    相反,您的基本逻辑应该是:

  • 从输入文件中读取一行
  • 将文本写入输出文件
  • 读取所有数据后,关闭两个文件
  • 删除输入文件
  • 将输出文件重命名为与输入文件相同的名称
  • 不要使用空的捕捉块。出现异常时,应显示一条消息


    除非使用RandomAccessFile,否则无法读取和写入同一文件

    当您打开要输出的文件时,该文件将被清除,因此没有数据可读取,因此没有数据可写入,因此结果是文件现在为空

    如果在“附加”模式下打开文件进行输出,则可以读取文件中的数据(数据将保留在文件中),但所有write语句都附加到原始文件的末尾,因此现在文件中有数据的副本

    相反,您的基本逻辑应该是:

  • 从输入文件中读取一行
  • 将文本写入输出文件
  • 读取所有数据后,关闭两个文件
  • 删除输入文件
  • 将输出文件重命名为与输入文件相同的名称
  • 不要使用空的捕捉块。出现异常时,应显示一条消息


    除非使用RandomAccessFile,否则无法读取和写入同一文件

    当您打开要输出的文件时,该文件将被清除,因此没有数据可读取,因此没有数据可写入,因此结果是文件现在为空

    如果在“附加”模式下打开文件进行输出,则可以读取文件中的数据(数据将保留在文件中),但所有write语句都附加到原始文件的末尾,因此现在文件中有数据的副本

    相反,您的基本逻辑应该是:

  • 从输入文件中读取一行
  • 将文本写入输出文件
  • 读取所有数据后,关闭两个文件
  • 删除输入文件
  • 将输出文件重命名为与输入文件相同的名称

  • 我不确定您使用的是什么版本的Java,但如果可以的话,我强烈建议您使用使用流的Java8。这是一个很棒的函数式编程接口,可以删除大量的样板代码。 看

    它以一种实用的方式讲述了你试图实现的目标。如果这会使您的方法复杂化,请忽略我的建议,但我肯定会在将来研究Java8及其FP构造,它们使Java中的编码更加优雅

    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    
    public class RandomNumber {
    
    public static void main(String[] args) {
    
        Path path = Paths.get("c:/workspace", "testing.txt");
    
        String s = "Add1\n";
        try(BufferedWriter writer = Files.newBufferedWriter(path,StandardOpenOption.APPEND)) { 
            writer.write(s);
    }
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    }

    我不确定您使用的是什么版本的Java,但如果可以,我强烈建议您使用使用流的Java 8。这是一个很棒的函数式编程接口,可以删除大量的样板代码。 看

    它以一种实用的方式讲述了你试图实现的目标。如果这会使您的方法复杂化,请忽略我的建议,但我肯定会在将来研究Java8及其FP构造,它们使Java中的编码更加优雅

    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    
    public class RandomNumber {
    
    public static void main(String[] args) {
    
        Path path = Paths.get("c:/workspace", "testing.txt");
    
        String s = "Add1\n";
        try(BufferedWriter writer = Files.newBufferedWriter(path,StandardOpenOption.APPEND)) { 
            writer.write(s);
    }
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    }

    我不确定您使用的是什么版本的Java,但如果可以,我强烈建议您使用使用流的Java 8。这是一个很棒的函数式编程接口,可以删除大量的样板代码。 看

    它以一种实用的方式讲述了你试图实现的目标。如果这会使您的方法复杂化,请忽略我的建议,但我肯定会在将来研究Java8及其FP构造,它们使Java中的编码更加优雅

    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    
    public class RandomNumber {
    
    public static void main(String[] args) {
    
        Path path = Paths.get("c:/workspace", "testing.txt");
    
        String s = "Add1\n";
        try(BufferedWriter writer = Files.newBufferedWriter(path,StandardOpenOption.APPEND)) { 
            writer.write(s);
    }
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    }

    我不确定您使用的是什么版本的Java,但如果可以,我强烈建议您使用使用流的Java 8。这是一个很棒的函数式编程接口,可以删除大量的样板代码。 看

    它以一种实用的方式讲述了你试图实现的目标。如果这会使您的方法复杂化,请忽略我的建议,但我肯定会在将来研究Java8及其FP构造,它们使Java中的编码更加优雅

    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    
    public class RandomNumber {
    
    public static void main(String[] args) {
    
        Path path = Paths.get("c:/workspace", "testing.txt");
    
        String s = "Add1\n";
        try(BufferedWriter writer = Files.newBufferedWriter(path,StandardOpenOption.APPEND)) { 
            writer.write(s);
    }
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    }

    在附加到字符串生成器之后,似乎需要重新分配给它。尝试替换<代码