如何在Java中将多行写入文本文件?

时间:2018-05-09 15:48:08

标签: java

所以我想用Java创建和写入一个文件。我知道怎么用一行来做,但我想知道如何将多行写入单个文件。

import java.io.FileWriter;
import java.io.BufferedWriter;

public class WritingToAFile {

public static void main(String[] args) {

   try{ 
   FileWriter fstream = new FileWriter ("P:/Computer Science/greeting.txt");
   BufferedWriter info = new BufferedWriter(fstream);

   for(int i = 1; i < 6; i++){
       info.write("Hello");
       info.newLine();
       info.write("Bonjour");
       info.newLine();
       info.write("Guten tag");
       info.newLine();
       info.write("Aloha");
       info.newLine();
       info.write("Nihao");
       info.close();
       }catch(Exception e){
          System.out.println("A write error has occurred");
    }   
  }
}

我现在知道它错了,但我不确定我做错了什么。非常感谢帮助!我只是一个初学者,所以我真的输了。

3 个答案:

答案 0 :(得分:4)

你关闭了每次迭代的文件 - qmake -spec macx-xcode project.pro - 这就是你有异常的原因。完成写入后,您需要关闭文件。

info.close();方法没有错。但是,您可以使用换行符来缩短它。

newLine(); - 是基于Unix的系统的新行分隔符。

"\n" - 是Windows系统的新行分隔符。

"\r\n"是一个独立于平台的新行分隔符。

"%n"

第二个问题是你没有关闭for(int i = 1; i < 6; i++) { info.write(String.format("Hello%n")); } info.close();

如果您使用的是Java 7+,我建议您使用FileWriter来删除try-with-resources块:

finally

文件输出:

public class Main {

    public static void main(String[] args) {
        try (FileWriter fstream = new FileWriter("greeting.txt");
             BufferedWriter info = new BufferedWriter(fstream)) {
            for (int i = 1; i < 6; i++) {
                info.write(String.format("Hello%n"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

<强>更新

所有输入输出操作都需要处理流,通道,文件描述符(例如Hello Hello Hello Hello Hello FileWriter)。应仔细关闭这些流以释放系统资源。如果不这样做可能会导致资源泄漏。尽管您已关闭BufferedWriter,但您忘记在代码中关闭info

正确使用fstream语句后,您将永远不必显式关闭流。 try-with-resources语句确保在语句结束时关闭每个资源。

答案 1 :(得分:1)

几乎做对了,事实上,它与info.newLine();无关,而是代码的语法。

您的catch实际上是在for循环之后,并未与try相关联。

您还可以在for循环中关闭该流,而不是在完成后关闭该流(这会导致IOException)。

样品:

try {
    FileWriter fstream = new FileWriter("P:/Computer Science/greeting.txt");
    BufferedWriter info = new BufferedWriter(fstream);
    for (int i = 1; i < 6; i++) {
        info.write("Hello");
        info.newLine();
        info.write("Bonjour");
        info.newLine();
        info.write("Guten tag");
        info.newLine();
        info.write("Aloha");
        info.newLine();
        info.write("Nihao");
    }
    info.close();
} catch (Exception e) {
    System.out.println("A write error has occurred");
}

答案 2 :(得分:0)

在write方法的字符串末尾添加基于系统的\n\r\n平台新行字符

try{
    for(int i = 1; i < 6; i++){
           info.write("Hello\n");
           info.write("Bonjour\n");
           ...

           }
    }
    catch (Exception e) {
    System.out.println("A write error has occurred");
}
finally{
    info.close();
}