我试图将一个整数数组输出到一个文件并且遇到了障碍。代码执行正常,没有抛出错误,但不是给我一个包含数字1-30的文件,而是给我一个文件填充[] [] [] [] []我已将问题隔离到包含的代码段。
try
{
BufferedWriter bw = new BufferedWriter(new FileWriter(filepath));
int test=0;
int count=0;
while(count<temps.length)
{
test=temps[count];
bw.write(test);
bw.newLine();
bw.flush();
count++;
}
}
catch(IOException e)
{
System.out.println("IOException: "+e);
}
filepath是指输出文件的位置。 temps是一个包含值1-30的数组。如果需要更多信息,我将很乐意提供。
答案 0 :(得分:4)
BufferedWriter.write(int)写入int的字符值,而不是int值。因此输出65应该将字母A
放到文件中,66将打印B ...等等。您需要将String
值而不是int值写入流。
使用BufferedWriter.write(java.lang.String)代替
bw.write(String.valueOf(test));
答案 1 :(得分:2)
我建议改为使用PrintStream
或PrintWriter
:
PrintStream ps = new PrintStream(filePath, true); // true for auto-flush
int test = 0;
int count = 0;
while(count < temps.length)
{
test = temps[count];
ps.println(test);
count++;
}
ps.close();
答案 2 :(得分:1)
您遇到的问题是您使用的是BufferedWriter.write(int)
方法。令你困惑的是,虽然方法签名表明它正在编写int
,但它实际上期望int表示编码字符。换句话说,写0
正在撰写NUL
,写65
会输出'A'
。
来自Writer's javadoc:
public void write(int c) throws IOException
写一个字符。要写入的字符包含在给定整数值的16个低位中; 16个高位被忽略。
解决问题的一种简单方法是在写入之前将数字转换为字符串。有很多方法可以实现这一目标,包括:
int test = 42;
bw.write(test+"");
答案 3 :(得分:0)
您可以将整数数组转换为字节数组,并执行以下操作:
public void saveBytes(byte[] bytes) throws FileNotFoundException, IOException {
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filepath))) {
out.write(bytes);
}
}
答案 4 :(得分:0)
您将数字作为整数写入文件,但您希望它是一个字符串。
将bw.write(test);
更改为bw.write(Integer.toString(test));