2015-03-01 2 views
0

Я пытаюсь прочитать файл и записать его в определенную папку. Я использую этот код:Копирование файла из местоположения в другое место

private void saveFile(File file){ 
    try { 
     OutputStream out = new FileOutputStream(new File("/Users/default/Desktop/fotos/test.png")); 
     Files.copy(file.toPath(), out); 
       System.exit(0); 

    } catch (IOException ex) { 
     Logger.getLogger(GetFiles.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

Файл .png файл. Если я использую этот метод, он создаст новый .png в каталоге fotos, но когда я дважды щелкну по нему, он скажет, что он пуст. Как это возможно и как я могу это решить?

ответ

4

Вы не закрываете выходной поток. Поэтому любые данные, буферизированные внутри него, прежде чем они будут записаны на диск, будут потеряны.

Вы можете использовать примерочных с-ресурсов заявление автоматически закрыть поток - или вы могли бы просто использовать:

// Alternatives, pass in the `File` to copy to, or make the method generally 
// more flexible in other ways. 
Files.copy(file.toPath(), Paths.get("/Users/default/Desktop/fotos/test.png")); 

Как и в сторону, это необычно назвать System.exit в методе, как это - это не как метод saveFileAndTerminateApplication. Точно так же исключение «обработка» не является идеальным. Я бы в принципе разрешил исключение, т. Е. Объявлял, что ваш метод его выбрасывает. В настоящее время существует три возможности:

  • Все работает, и приложение завершает
  • The копию работ, но System.exit выдает непроверенное исключение
  • копия терпит неудачу, поэтому метод возвращает - вызывающий абонент может сделать вывод, что что-то пошло не так, но, не имея представления, что

Это не звучит как очевидный набор результатов ко мне ...

Смежные вопросы