Потоковый писатель на char [] не работает - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть следующий код, но char [] cc, кажется, не записывается, когда я проверял выходной файл.Может кто-нибудь сказать мне, что не так?

import java.io.*;

class Test {
  public static void main(String[] args) {
    System.out.printf("start of main\n");
    char[] cc = new char[300];
    try {
      String s = "this is a test.";
      System.arraycopy(s.toCharArray(), 0, cc, 0, s.length());
      System.out.printf("cc = %s\n", new String(cc));
      String filename = "tst.data";
      DataOutputStream ostream = new DataOutputStream(new FileOutputStream(filename));
      OutputStreamWriter writer = new OutputStreamWriter(ostream);
      writer.write(cc, 0, 300);
      ostream.close();

      DataInputStream istream = new DataInputStream(new FileInputStream(filename));
      InputStreamReader reader = new InputStreamReader(istream);
      char[] newcc = new char[300];
      reader.read(newcc, 0, 300);
      istream.close();

      System.out.printf("newcc = %s\n", new String(newcc));
    } catch (Exception e) {
      System.out.printf("Exception - %s\n", e);
    }
  }
}

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Вам необходимо закрыть внешнюю оболочку ввода / вывода.

Заменить

ostream.close();

на

writer.close();

Не связано с конкретной проблемой, те DataOutputStream и DataInputStream оболочкине нужны в этом контексте.Удалить их.Наконец, вы должны закрывать потоки в блоке finally.См. Также этот связанный вопрос: Должен ли я закрыть FileOutputStream, который упакован в PrintStream?

0 голосов
/ 11 ноября 2011

Появляется, что записывающее устройство все еще не сбрасывает буфер в ostream.Вы можете использовать writer.flush ();как это

writer.write(cc, 0, 300);
writer.flush();
...