繁体   English   中英

BufferedWriter不写所有信息

[英]BufferedWriter not writing ALL the information

我正在制作一个简单的教程程序,其中用户输入一些数据,然后将该数据写入文本文件,然后读取该文本文件并显示数据。 但是,并非所有数据都被写入文本文件。 请查看以下内容:

这是我的代码:

package chasi.fecalMatter.ExcrementalProgram;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

public class RedundantExcrement {

    static String inputName = JOptionPane.showInputDialog("Please input your FULL name:");
    static String inputUsername = JOptionPane.showInputDialog("Please input your desired Username:");
    static String inputJobTitle = JOptionPane.showInputDialog("Please input your Job title:");
    static String inputSalary = JOptionPane.showInputDialog("Please input your monthly salary:");

    static int convertedSalary = 0; /*Convert salary from String to int*/
    static int benefitDeduction = 0;

    static String empFileName = inputUsername+"INFO";
    static BufferedWriter bwriter = null;

    public static void main (String[] args) throws IOException {
        //Catch NumberFormatException.
        try {
            Integer.parseInt(inputSalary);
        } catch (NumberFormatException nfEx) {
            JOptionPane.showMessageDialog(null, "Please ensure that " +
                    "your salary is entered in NUMERIC form.", "ERROR!", 2);
            return;
        }

        //Specify instructions as regard salary -to- Benefit deduction ratio
        if (convertedSalary >= 3500) {
            benefitDeduction = 300;
        } else {
            benefitDeduction = 180;
        }

    try { /*Catches IOException AND NullPointerException*/ 
            FileWriter fwriter = new FileWriter(empFileName);
            bwriter = new BufferedWriter(fwriter);

            bwriter.write(inputName);
            bwriter.newLine();
            bwriter.write(inputJobTitle);
            bwriter.newLine();
            bwriter.write(inputSalary);
            bwriter.newLine();
            bwriter.write(benefitDeduction);
            bwriter.newLine();
            bwriter.write("----------");
            bwriter.newLine();              
        } catch (IOException | NullPointerException ionpEx) {
            JOptionPane.showMessageDialog(null, "An ERROR has occured", "ERROR!", 2);
            return;
        } finally { /*CLOSE the writer*/                
            try{
                if (bwriter != null) {
                    bwriter.close();
                }
            } catch (IOException ioEx2) {
                JOptionPane.showMessageDialog(null, "ERROR!");
                return;
            }
        }
    }
}

正如你所看到的,我用的是INT convertedSalary到用户输入的转换inputSalary从字符串转换成数字。 在我的方法中,我使用

try {
    Integer.parseInt(inputSalary);
} catch (NumberFormatException nfEx) {
    JOptionPane.showMessageDialog(null, "Please ensure that " +
            "your salary is entered in NUMERIC form.", "ERROR!", 2);
    return;
}

为了隐蔽它。 稍后(应该)由BufferedWriter编写。

我也有这段代码:

try {
    Integer.parseInt(inputSalary);
} catch (NumberFormatException nfEx) {
    JOptionPane.showMessageDialog(null, "Please ensure that " +
                "your salary is entered in NUMERIC form.", "ERROR!", 2);
    return;
}

为了改变我的benefitDeduction的价值,取决于用户薪水的价值。

但是, benefitDeduction已写入文本文件,但是我得到了: 运行程序的结果

谢谢您的帮助!

看一下API

public void write(int c)
   throws IOException

写一个字符。 给定整数值的16个低位包含在要写入的字符中。 16个高位被忽略。

这意味着int实际上是一个字符,将根据Unicode / ASCII表进行转换。

要写整数值,请使用bwriter.writer(String.valueOf(benefitDeduction));

您的代码有两个主要问题。

首先,您实际上并没有将ParseInt的值分配给您的convertedSalary变量。 因此,它将始终为零。

再一次,您也不会将convertedSalary写入文件。

其次,我认为您在BufferedWriter.write(int)PrintWriter.print(int)之间感到困惑。 如果BufferedWriter065535之间(如果不是,则低两个字节中的任何字符)将打印此整数表示的字符。

因此,例如,如果您的整数是65,则将打印的字符是A ,在Unicode中其值为65

因此,也许您应该在那里使用PrintWriter而不是BufferedWriter 或者按照其他答案的建议将数字转换为字符串。

正如其他答案所指出的那样,您的问题是对write(int)的调用。 但是,您不必担心转换,也可以使用StringBuilder首先创建您的文本,然后一次调用write(String)编写它。 这样,您不必担心benefitDeduction的类型:

final String inputName = "Tom";
final String inputJobTitle = "Developer";
final String inputSalary = "1337";
final int benefitDeduction = 180;

try(final BufferedWriter bwriter = new BufferedWriter(new FileWriter("blub.txt"))) {
    final StringBuilder builder = new StringBuilder(inputName);
    builder.append("\n").append(inputJobTitle);
    builder.append("\n").append(inputSalary);
    builder.append("\n").append(benefitDeduction);
    builder.append("\n----------\n");
    bwriter.write(builder.toString());
} catch (IOException | NullPointerException ex) {
  JOptionPane.showMessageDialog(null, "An ERROR has occured", "ERROR!", 2);
  return;
}

还要注意,我使用了try-with-resources语句来处理BufferedWriter 它将处理资源并为您关闭资源。 无需手动进行。

上面的代码将以下数据写入文件"blub.txt"

Tom
Developer
1337
180
----------

正如我已经在评论中写道,你并没有使用新的值给变量convertedSalary

更改行:

Integer.parseInt(inputSalary);

至:

convertedSalary = Integer.parseInt(inputSalary);

要做到这一点。

您的问题是,当您写数字时,这些值被写为二进制数字而不是文本数字。 您可以通过writer.write("" + myNumber);来解决此问题writer.write("" + myNumber);

Integer.parseInt(inputSalary)//返回一个整数

从JDK引用:Integer.parseInt(); =“将字符串参数解析为带符号的十进制整数。字符串中的字符都必须全部为十进制数字,除了第一个字符可以是ASCII减号'-'('\\ u002D')表示负值或ASCII加号'+'('\\ u002B')表示一个正值,返回的整数值,就像参数和基数10作为parseInt(java.lang.String,int)的参数一样方法。”

您的代码应为:

convertInt = Integer.parseInt(inputSalary);

暂无
暂无

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

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