Отправка нескольких файлов в Google Bucket с Multer - почему мои файлы пусты?

Убедитесь, что поток полностью закрыт во всех сценариях.

Это немного тревожно, как многие из этих ответов оставляют дескриптор файла открытым в случае ошибки. Ответ https://stackoverflow.com/a/15053443/2498188 на деньги, но только потому, что BufferedWriter() не может бросить. Если бы это могло, то исключение оставило бы объект FileWriter открытым.

Более общий способ сделать это, который не заботится о том, может ли BufferedWriter() вызывать:

  PrintWriter out = null;
  BufferedWriter bw = null;
  FileWriter fw = null;
  try{
     fw = new FileWriter("outfilename", true);
     bw = new BufferedWriter(fw);
     out = new PrintWriter(bw);
     out.println("the text");
  }
  catch( IOException e ){
     // File writing/opening failed at some stage.
  }
  finally{
     try{
        if( out != null ){
           out.close(); // Will close bw and fw too
        }
        else if( bw != null ){
           bw.close(); // Will close fw too
        }
        else if( fw != null ){
           fw.close();
        }
        else{
           // Oh boy did it fail hard! :3
        }
     }
     catch( IOException e ){
        // Closing the file writers failed for some obscure reason
     }
  }

Изменить:

Начиная с Java 7, рекомендуется использовать «попробовать с ресурсами» и позволить JVM справиться с этим:

  try(    FileWriter fw = new FileWriter("outfilename", true);
          BufferedWriter bw = new BufferedWriter(fw);
          PrintWriter out = new PrintWriter(bw)){
     out.println("the text");
  }  
  catch( IOException e ){
      // File writing/opening failed at some stage.
  }
0
задан Marie Pelletier 1 March 2019 в 20:27
поделиться