我正在制作一个简单的教程程序,用户输入一些数据,然后将数据写入文本文件,然后读取文本文件并显示数据。但是,并非所有数据都写入文本文件。请查看以下内容:
这是我的代码:
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
从String转换为数字。在我的方法中,我使用
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
被写入文本文件,但我得到了这个:
谢谢,如果你能提供帮助!
答案 0 :(得分:4)
查看API。
public void write(int c)
throws IOException
写一个字符。要写的字符包含在 给定整数值的16个低位; 16高阶 位被忽略。
这意味着int实际上是一个char,将根据Unicode / ASCII表进行转换。
要写入整数值,请使用bwriter.writer(String.valueOf(benefitDeduction));
答案 1 :(得分:4)
您的代码存在两个主要问题。
首先,您实际上并未将ParseInt
中的值分配给convertedSalary
变量。因此,它总是为零。
然后,您也不会将convertedSalary
写入文件。
其次,我认为您在BufferedWriter.write(int)
和PrintWriter.print(int)
之间感到困惑。 BufferedWriter
将打印由此整数表示的字符,如果它在0
和65535
之间(或者如果不是则在其低两个字节中存在的任何内容)。
因此,如果您的整数是例如65,那么您将打印的是字符A
,其值在Unicode中为65
。
所以也许你应该使用PrintWriter
而不是BufferedWriter
。或者将数字转换为字符串,如其他答案所示。
答案 2 :(得分:1)
正如其他答案所指出的,你的问题是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
statement来处理BufferedWriter
。它将处理资源并为您关闭它。无需手动执行此操作。
以上代码将以下数据写入文件"blub.txt"
:
Tom
Developer
1337
180
----------
正如我在评论中写的那样,您并未为变量convertedSalary
分配新值。
更改行:
Integer.parseInt(inputSalary);
为:
convertedSalary = Integer.parseInt(inputSalary);
这样做。
答案 3 :(得分:0)
您的问题是,当您编写数字时,这些值将被写为二进制数而不是文本数。您可以通过执行writer.write("" + myNumber);
答案 4 :(得分:0)
Integer.parseInt(inputSalary)//返回一个整数
从JDK引用: 的Integer.parseInt(); ="将字符串参数解析为带符号的十进制整数。字符串中的字符必须都是十进制数字,除了第一个字符可能是ASCII减号' - ' (' \ u002D')表示负值或ASCII加号' +' (' \ u002B')表示正值。返回结果整数值,就像参数和基数10作为parseInt(java.lang.String,int)方法的参数一样。"
您的代码应为:
convertedInt = Integer.parseInt(inputSalary);