Java输出整数到文件

时间:2012-05-29 22:19:43

标签: java file-io

我试图将一个整数数组输出到一个文件并且遇到了障碍。代码执行正常,没有抛出错误,但不是给我一个包含数字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的数组。如果需要更多信息,我将很乐意提供。

5 个答案:

答案 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)

我建议改为使用PrintStreamPrintWriter

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));