1

我试图将一个整数数组输出到一个文件并遇到了障碍。代码正确执行,没有抛出错误,但不是给我一个包含数字 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);
       }

文件路径是指输出文件的位置。temps 是一个包含值 1-30 的数组。如果需要更多信息,我将很乐意提供。

4

5 回答 5

4

BufferedWriter.write(int)写入 int 的字符值,而不是 int 值。所以输出 65 应该把字母A放到文件中,66 会打印 B...等。您需要将String值而不是 int 值写入流。

改用BufferedWriter.write (java.lang.String)

bw.write(String.valueOf(test));
于 2012-05-29T22:25:42.517 回答
2

我建议使用PrintStreamorPrintWriter代替:

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();
于 2012-05-29T22:29:38.940 回答
1

您遇到的问题是您正在使用该BufferedWriter.write(int)方法。让您感到困惑的是,虽然方法签名表明它正在编写一个int,但它实际上期望该 int 表示一个编码字符。换句话说,写作0就是写作NUL,写作65会输出'A'

来自Writer 的javadoc:

public void write(int c) throws IOException

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

纠正问题的一种简单方法是在写入之前将数字转换为字符串。有很多方法可以实现这一点,包括:

int test = 42;
bw.write(test+"");
于 2012-05-29T22:26:41.717 回答
0

您可以将整数数组转换为字节数组并执行以下操作:

public void saveBytes(byte[] bytes) throws FileNotFoundException, IOException {
 try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filepath))) {
   out.write(bytes);
 }
}
于 2012-05-29T22:24:23.853 回答
0

您将数字作为整数写入文件,但您希望它是一个字符串。更改bw.write(test);bw.write(Integer.toString(test));

于 2012-05-29T22:25:18.910 回答