【问题标题】:PrintWriter failing to print to filePrintWriter 无法打印到文件
【发布时间】:2021-09-20 15:23:42
【问题描述】:

文件已成功创建,但我无法让 PrintWriter 将任何内容打印到文本文件中。代码:

import java.io.File;
import java.util.Scanner;
import java.io.IOException;
import java.io.PrintWriter;

public class exams {
    public static void main (String[] args) throws IOException{
        Scanner scanner = new Scanner(System.in);
        System.out.println("How many scores were there?");
        int numScores = scanner.nextInt();
        int arr[] = new int[numScores];

        for (int x=0; x<numScores; x++){
            System.out.println("Enter score #" + (x+1));
            arr[x] = scanner.nextInt();
        }

        File file = new File("ExamScores.txt");
        if(!file.exists()){
           file.createNewFile();
           PrintWriter out = new PrintWriter(file);
            for (int y=0; y<arr.length; y++){
                out.println(arr[y]);
            }
        }
        else {
            System.out.println("The file ExamScores.txt already exists.");
        }   
    }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    您必须刷新和/或关闭文件才能将数据写入磁盘。

    在您的代码中添加out.close()

    PrintWriter out = new PrintWriter(file);
    for (int y=0; y<arr.length; y++){
        out.println(arr[y]);
    }
    out.close()
    

    【讨论】:

    • 谢谢!我知道这是小事。
    【解决方案2】:

    您需要在程序退出之前关闭 PrintWriter,这具有刷新打印流的效果,以确保所有内容都写入文件。试试这个:

    PrintWriter out = null;
    try {
        //...
        out = new PrintWriter(file);
        //...
    } finally {
        if (out != null) {
            out.close();
        }
    }
    

    【讨论】:

    • try-with-resources 语法(Java 7 以上)更简单、更可靠。
    【解决方案3】:

    完成写入后,您需要刷新并关闭文件 http://download.oracle.com/javase/1.4.2/docs/api/java/io/PrintWriter.html 无效关闭() 关闭流。 无效冲洗() 冲洗流。

    【讨论】:

      【解决方案4】:

      printwriter 类适用于流而不适用于文件,这就是您不能写入该文件的原因。您需要使用 FileOutputStream 创建一个文件,之后您将能够使用 printwriter 写入该文件。试试这个:

      FileOutputStream 考试 = new FileOutputStream("ExamScores.txt"); PrintWriter out = new PrintWriter(exam, true);

      【讨论】:

      • 这是直截了当的错误信息。 PrintWriter 确实可以处理文件。请参阅上面pajton的答案。 OP 在写入刷新缓冲区后错过了 out.close() 语句。一旦调用 out.close(),PrintWriter 会将缓冲的输出写入文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多