[英]Java program is not writing all the records to the output file using the 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)
之间感到困惑。 如果BufferedWriter
在0
到65535
之间(如果不是,则低两个字节中的任何字符)将打印此整数表示的字符。
因此,例如,如果您的整数是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.