如何使用 java 在文件中逐行写入内容

How to write the content Line by Line in a file using java

如何将所有输出逐行写入 txt 文件中?下面的代码片段只写了 1 行。基本上我希望 random_no 在 txt 文件中逐行写入。

public static void main(String args[]) throws FileNotFoundException, IOException {
    HashSet <Integer> newset = new HashSet <Integer>();
    
    FileOutputStream fo = null;
    
    for(int i =0;i<100;i++){
        double d=Math.random()*10000;  
        //System.out.println(d);
        String random_no= Integer.toString((int)d);
        newset.add((int)d));
        
        fo = new FileOutputStream("E:\Test\Files\Test_No.txt" ); 
        fo.write(random_no.getBytes();
        
        
        
    }
    fo.close();
    System.out.println("Size is : " +newset.size());

您正在循环内打开文件,请尝试:

public static void main(String args[]) throws FileNotFoundException, IOException {
    HashSet <Integer> newset = new HashSet <Integer>();
    FileOutputStream fo = new FileOutputStream("E:\Test\Files\Test_No.txt" );
    for(int i =0;i<100;i++){
        double d=Math.random()*10000;  
        //System.out.println(d);
        String random_no= Integer.toString((int)d) + System.lineSeparator();
        newset.add((int)d);
        fo.write(random_no.getBytes());
    }
    fo.close();
    System.out.println("Size is : " +newset.size());
}

您可能还想考虑自动处理关闭:

public static void main(String args[]) throws FileNotFoundException, IOException {
    HashSet <Integer> newset = new HashSet <Integer>();
    try (FileOutputStream fo = new FileOutputStream("E:\Test\Files\Test_No.txt" )) {
        for(int i =0;i<100;i++){
            double d=Math.random()*10000;  
            //System.out.println(d);
            String random_no= Integer.toString((int)d) + System.lineSeparator();
            newset.add((int)d);
            fo.write(random_no.getBytes());
        }
    }
    System.out.println("Size is : " +newset.size());
}

这里需要做两件事:

a) 在循环外打开文件

b) 在每个数字后写换行符

public static void main(String[] args) throws IOException {
        FileOutputStream fo = new FileOutputStream("D:\Test_No.txt");
         HashSet<Integer> newset = new HashSet <Integer>();
        for (int i = 0; i < 100; i++) {
            double d = Math.random() * 10000;
            // System.out.println(d);
            String random_no = Integer.toString((int) d);
            newset.add((int)d);
            fo.write(random_no.getBytes());
            fo.write("\n".getBytes());
        }
        fo.close();

}

FileOutputStream 应该在循环外初始化。

此外,要打印新行,您也可以使用 BufferedWriter 而不是 FileOutputStream

BufferedWriter 为您提供了 BufferedWriter.newLine() 的选项,它将处理独立于环境(windows、unix 等)的新行。

    public static void main(String args[]) throws IOException {
        HashSet<Integer> newset = new HashSet<>();
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("Test_No.txt", true));
        for (int i = 0; i < 100; i++) {
            double d = Math.random() * 10000;
            String random_no = Integer.toString((int) d);
            newset.add((int) d);
            bufferedWriter.write(random_no);
            bufferedWriter.newLine();
        }
        bufferedWriter.close();
        System.out.println("Size is : " + newset.size());
    }