直接从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; } 

请帮忙

问题是你使用的是BufferedWriter并且你没有关闭它。 它的缓冲区中有一些内容没有写入而你却丢失了。

尝试刷新缓冲区并关闭BufferedWriter

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

在你的br.close();之前包括这两行br.close();

您还可以在这里阅读BufferedWriter工作原理。

我认为你也应该关闭FileWriter ,以便解锁文件。

 fw.close(); 

编辑1:

关闭BufferedWriter将为您刷新缓冲区。 你只需要关闭它。

你做错了很多事。

第一:你没有关闭所有资源; 该文件的编写者在哪里关闭?

第二:使用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); } 

完成,编码独立,并关闭所有资源。