Читайте напрямую с URL-адреса и пишите в файл - Java

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

Мой код,

try {
            URL url = new URL(sourceUri);
            URLConnection conn = url.openConnection();

            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));


            file.getParentFile().mkdirs();
            file.createNewFile();

            FileWriter fw = new FileWriter(file);
            BufferedWriter bw  = new BufferedWriter(fw);

            while ((inputLine = br.readLine()) != null) {
                bw.write(inputLine + System.getProperty("line.separator"));
            }

            br.close();

            System.out.println("DONE");

        }catch (IOException ioe){
            ioe.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }

        return ontologies;
    }

Пожалуйста, помогите

Ответ 1

Проблема в том, что вы используете BufferedWriter, и вы его не закрываете. У него есть некоторый контент в его буфере, который не записывается, и вам не хватает.

Попробуйте очистить буфер и закрыть BufferedWriter:

bw.flush();
bw.close();

Включите эти две строки после вашего "br.close();".

Также вы можете прочитать, как BufferedWriter работает здесь.

И я думаю, вы должны закрыть FileWriter тоже, чтобы разблокировать файл.

fw.close();

РЕДАКТИРОВАТЬ 1:

Закрытие BufferedWriter очистит буфер для вас. Вам нужно только закрыть его.

Ответ 2

Вы делаете много вещей неправильно.

Во-первых: вы не закрываете все свои ресурсы; где записывается файл в файл?

Во-вторых: вы используете new InputStreamReader(...) без указания кодировки. Что говорит о том, что кодировка на другом конце является вашей комбинацией JVM/OS?

И последнее, но не менее важное: на самом деле это самое важное, вы должны использовать java.nio.file. Это 2015 год.

Простое решение:

final Path path = file.toPath(); // or rather use Path directly
Files.createDirectories(path.getParent());

try (
    final InputStream in = conn.getInputStream();
) {
    Files.copy(in, path);
}

Готово, независимое кодирование и все ресурсы закрыты.