直接从URL读取并写入文件-Java
我正在读取URL的内容并编写一个文件。问题是,我无法编写文件中的所有内容,也不知道我做错了什么 我的代码直接从URL读取并写入文件-Java,java,file,url,Java,File,Url,我正在读取URL的内容并编写一个文件。问题是,我无法编写文件中的所有内容,也不知道我做错了什么 我的代码 try { URL url = new URL(sourceUri); URLConnection conn = url.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(
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
:
bw.flush();
bw.close();
在br.close()之前的后面包括这两行代码>
您还可以阅读BufferedWriter
的工作原理
我认为您也应该关闭FileWriter
,以便解除对文件的阻止
fw.close();
编辑1:
关闭BufferedWriter
将为您刷新缓冲区。您只需关闭它。问题是您使用的是缓冲写入程序,而您没有关闭它。它的缓冲区中有一些内容没有写入,而您丢失了
尝试刷新缓冲区并关闭BufferedWriter
:
bw.flush();
bw.close();
在br.close()之前的后面包括这两行代码>
您还可以阅读BufferedWriter
的工作原理
我认为您也应该关闭FileWriter
,以便解除对文件的阻止
fw.close();
编辑1:
关闭BufferedWriter
将为您刷新缓冲区。您只需关闭它。您做的很多事情都不正确
第一:你没有关闭所有的资源;文件的写入程序在哪里关闭
第二:使用新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);
}
完成,独立编码,关闭所有资源。您做的很多事情都不正确
第一:你没有关闭所有的资源;文件的写入程序在哪里关闭
第二:使用新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);
}
完成,独立编码,关闭所有资源。第一件事:使用java.nio.file。第二:你绝对确定这是一个文本文件吗?为什么不直接复制InputStream
?@aioobe不能重复;这个答案使用了一个过时的API。2015年,当您有java.nio.file时,请参阅我的答案。@fge,我在链接的问题中没有看到任何提到过时API的内容。(当然,有些答案使用的是过时的API,但正确的做法是发布该问题的答案,并将其作为dup关闭。)@aioobe提示:文件
@fge,我仍然没有在问题中看到任何文件
。答案过时并不意味着应该发布新问题。第二:你绝对确定这是一个文本文件吗?为什么不直接复制InputStream
?@aioobe不能重复;这个答案使用了一个过时的API。2015年,当您有java.nio.file时,请参阅我的答案。@fge,我在链接的问题中没有看到任何提到过时API的内容。(当然,有些答案使用的是过时的API,但正确的做法是发布该问题的答案,并将其作为dup关闭。)@aioobe提示:文件
@fge,我仍然没有在问题中看到任何文件
。答案过时并不意味着应该发布新问题。你是对的,经过编辑。谢谢你做得很好。你是对的,经过编辑。谢谢你做得很好。看起来文件有问题。复制看起来文件有问题。复制