繁体   English   中英

尝试使用Java中的文件I / O捕获逻辑错误

[英]Try Catch logic error with file i/o in Java

因此,我一直在尝试从各种来源学习Java,我已经学习了大约2年。 到目前为止,一切都进行得很顺利,我已经有一段时间没有发布过stackoverflow了。 最近,我一直在尝试弄清楚如何使用java创建和读取文件。 我可以在单独的应用程序中同时执行这两项操作,但是当我尝试执行这两项操作时并不总是有效。

我想发生的事情:我希望程序创建data.txt ,然后希望它读取数据并在error.txt上产生错误日志。

发生的情况:data.txt文件已按预期创建,但是没有任何内容写入error.txt文件。 我在获取try / catch块及其工作原理方面遇到麻烦。 任何人有任何想法吗? 即使只是一些建议也将不胜感激。 谢谢!

import java.io.*;
import java.util.Scanner;


public class dataReader {

    public static void main(String args[]) throws Exception {
        File fileName;
        fileName = new File("data.txt");
        PrintWriter outputFile;
        outputFile = new PrintWriter(fileName);

        File errorFile;
        errorFile = new File("errors.txt");
        PrintWriter outputErrorFile;
        outputErrorFile = new PrintWriter(errorFile);

        Scanner inputFile;



        int recordNumber = 0;


        String inputData;



        outputFile.println(77);
        outputFile.println("Fred");
        outputFile.println(92);
        outputFile.println("Wilma");
        outputFile.println(89.9);
        outputFile.println("Barney");
        outputFile.println(42);
        outputFile.println("BettyS");

        inputFile = new Scanner(fileName);

        while (inputFile.hasNext()) {

            recordNumber++;

            try {
                inputData = inputFile.nextLine();
                if (Integer.parseInt(inputData) < 50) {

                    outputErrorFile.println(recordNumber + ", " + inputData + ", is less than 50.");
                } else if (Integer.parseInt(inputData) > 90) {
                    outputErrorFile.println(recordNumber + ", " + inputData + ", is less than 50.");
                }
            } catch (Exception e) {
                outputErrorFile.println(recordNumber + ",  That's not an integer.");
            }

        }



        outputFile.close();
        outputErrorFile.close();


        System.out.println("Program terminated.");

    }
}

移动outputFile.close(); inputFile = new Scanner(fileName);之前的行inputFile = new Scanner(fileName); 目前,它只是缓存在内存中,实际上并未写入磁盘。

PrintWriter的文档说明了一切。 PrintWriter(Writer)构造函数创建一个不会自动刷新的writer。

您必须调用close或flush方法将数据写入文件。

因此,您必须使用outputFile.close(); 开始阅读之前的方法。

作为一种好习惯,您必须关闭所有PrintWriter实例,以避免内存泄漏。

仅在这种情况下,请添加inputFile.close(); 在程序结束时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM