Попытка написать цикл, который использует OutputStream для записи в текстовый файл - PullRequest
1 голос
/ 03 мая 2010

Я не программист Java, я программист VB. Я делаю это как часть задания, однако я не прошу помощи в чем-то связанном с назначением Я хотел бы выяснить, как заставить OutputStreamWriter работать должным образом в этом случае. Я просто хочу записать значения, которые я генерирую, и поместить их в текстовый документ. Файл сгенерирован, но существует только одна запись, а не 40, которые я ожидаю. Я мог бы сделать это в одно мгновение с VB, но Java сейчас мне очень странно. Ваша помощь приветствуется.

Спасибо,

Steve

Вот код:

  public static void main(String[] args) {
    long start, end;
    double result,difference;

    try {
      //OutputStream code assistance from 
      // http://tutorials.jenkov.com/java-io/outputstreamwriter.html
      OutputStream outputStream = new FileOutputStream("c:\\Temp\\output1.txt");
      Writer out = new OutputStreamWriter(outputStream);

      for(int n=1; n<=20; n++) {
        //Calculate the Time for n^2.
        start = System.nanoTime();

        //Add code to call method to calculate n^2
        result =  mN2(n);
        end = System.nanoTime();
        difference = (end - start);

        //Output results to a file
        out.write("N^2 End time: " + end + " Difference: " + 
            difference + "\n");
        out.close();
      }
    } catch (IOException e){
    }

    try {
      OutputStream outputStream = new FileOutputStream("c:\\Temp\\output1.txt");
      Writer out = new OutputStreamWriter(outputStream);

      for(int n=1; n<=20; n++){
        //Calculate the Time for 2^n.
        start = System.nanoTime();
        //Add code to call method to calculate 2^n
        result =  m2N(n);
        end = System.nanoTime();
        difference = (end - start);
        //Output results to a file
        out.write("N^2 End time: " + end + " Difference: " + difference + "\n");
        out.close();
      }
    } catch (IOException e){
    }
  }

  //Calculate N^2
  public static double mN2(double n) {
    n = n*n;
    return n;
  }

  //Calculate 2N
  public static double m2N(double n) {
    n = 2*n;
    return n;
  }

1 Ответ

4 голосов
/ 03 мая 2010

Вы закрываете свой файл в цикле. В следующий раз в цикле вы попытаетесь записать в закрытый файл, который сгенерирует исключение ... но там, где вы ловите IOException, у вас есть пустой блок, который фактически игнорирует исключение.

Попытка переместить вызов out.close() в блок finally, например:

try {
  ...
}
catch ( IOExcetpion e) {
  // Log any errors
}
finally {
  out.close();
}
...