Читайте напрямую с 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);
}
Готово, независимое кодирование и все ресурсы закрыты.