2012-05-22 3 views
0

Этот метод должен писать произвольные символы, но он вообще ничего не пишет. Я, наверное, делаю что-то глупое здесь, но для жизни меня не могу найти.Почему мой метод записи файлов не работает?

public void writeRandomChunk(String fileName) { 
    try { 
     File saveFile = new File(folderName + '/' + fileName); 

     PrintWriter writer = new PrintWriter(
          new BufferedWriter(
          new FileWriter(saveFile))); 

     Random r = new Random(System.currentTimeMillis()); 

     for (int i = 0; i < chunkSize; i++) { 
      for (int j = 0; j < chunkSize; j++) { 
       writer.print((char)(r.nextInt(26) + 'a')); 
      } 
      writer.println(); 
     } 

    } catch (Exception e) { 
     System.out.println("Error in WorldFile writeRandomFile:\n" 
          + e.getLocalizedMessage()); 
    } 
} 
+0

'PrintWriter' буферизуется, вам также не нужен« BufferedWriter ». – EJP

ответ

4

Как и любой поток (и это относится к большинству языков), вам необходимо закрыть его, когда закончите.

Потоки оптимизированы, чтобы быть быстрыми, и, как следствие, не все данные, которые вы пишете на них, мгновенно отображаются в файле. Когда вы close() или flush() поток, данные записываются в файл (или любой другой механизм хранения, который вы используете).

В вашем случае попробуйте следующее.

public void writeRandomChunk(String fileName) { 
    PrintWriter writer = null; 
    try { 
     File saveFile = new File(folderName + '/' + fileName); 
     writer = new PrintWriter(
          new BufferedWriter(
          new FileWriter(saveFile))); 

     Random r = new Random(System.currentTimeMillis()); 

     for (int i = 0; i < chunkSize; i++) { 
      for (int j = 0; j < chunkSize; j++) { 
       writer.print((char)(r.nextInt(26) + 'a')); 
      } 
      writer.println(); 
     } 

    } catch (Exception e) { 
     System.out.println("Error in WorldFile writeRandomFile:\n" 
          + e.getLocalizedMessage()); 
    } finally { 
     if (writer != null) 
      writer.close(); 
    } 
} 
1

Вам необходимо свернуть() и/или закрыть() файл в какой-то момент.

+0

О, дух. Понимаете, я знал, что это что-то глупое. Благодаря! – ChemicalRocketeer

0

Не закрыли автора, попробуйте в конце.

finally { 
    writer.close(); 
} 
0

Вы всегда должны закрыть свой поток. попробуйте эту модель с авторами:

PrinterWriter writer = null; 
try { 
    writer = new PrinterWriter(...); 
    // do your write loop here. 
} catch (Exception e) { 
    // recover from exception. 
} finally { 
    if (writer != null) { 
     writer.close(); 
    } 
}