我正在读取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;
}
请帮忙
答案 0 :(得分:6)
你做错了很多事。
首先:你不要关闭所有资源;该文件的编写者在哪里关闭?
第二:您使用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);
}
完成,编码独立,所有资源都已关闭。
答案 1 :(得分:1)
问题是您使用的是BufferedWriter
而您没有关闭它。它的缓冲区中有一些内容没有写入,你就错过了。
尝试刷新缓冲区并关闭BufferedWriter
:
bw.flush();
bw.close();
在br.close();
之前包含这两行。
此外,您还可以了解BufferedWriter
的工作原理here。
我认为你也应该关闭FileWriter
,以便取消阻止文件。
fw.close();
编辑1:
关闭BufferedWriter
将为您刷新缓冲区。你只需关闭它。