http://www.example.com/information.asp
디렉토리에 파일 을 가져 와서 저장해야하는 온라인 파일 (예 :)이 있습니다. 온라인 파일 (URL)을 한 줄씩 잡고 읽는 몇 가지 방법이 있지만 Java를 사용하여 파일을 다운로드하고 저장하는 방법이 있습니까?
답변
부여 자바 NIO을 시도 :
URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
사용 transferFrom()
하다 잠재적으로 훨씬 더 효율적인 소스 채널로부터 판독하고,이 채널을 쓰는 간단한 루프보다. 많은 운영 체제는 실제로 복사하지 않고 소스 채널에서 파일 시스템 캐시로 바이트를 직접 전송할 수 있습니다.
참고 : transferFrom의 세 번째 매개 변수는 전송할 최대 바이트 수입니다. Integer.MAX_VALUE
최대 2 ^ 31 바이트를 전송하고 최대 2 ^ Long.MAX_VALUE
63 바이트를 허용합니다 (존재하는 파일보다 큼).
답변
답변
더 간단한 nio 사용법 :
URL website = new URL("http://www.website.com/information.asp");
try (InputStream in = website.openStream()) {
Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING);
}
답변
public void saveUrl(final String filename, final String urlString)
throws MalformedURLException, IOException {
BufferedInputStream in = null;
FileOutputStream fout = null;
try {
in = new BufferedInputStream(new URL(urlString).openStream());
fout = new FileOutputStream(filename);
final byte data[] = new byte[1024];
int count;
while ((count = in.read(data, 0, 1024)) != -1) {
fout.write(data, 0, count);
}
} finally {
if (in != null) {
in.close();
}
if (fout != null) {
fout.close();
}
}
}
아마도이 방법의 외부에서 예외를 처리해야합니다.
답변
오래된 질문이지만 올바르게 닫힌 리소스가있는 간결하고 읽기 쉬운 JDK 전용 솔루션입니다.
public static void download(String url, String fileName) throws Exception {
try (InputStream in = URI.create(url).toURL().openStream()) {
Files.copy(in, Paths.get(fileName));
}
}
두 줄의 코드로 종속성이 없습니다.
답변
파일을 다운로드하려면 어떤 방식 으로든 파일을 읽어야합니다. 라인 단위 대신 스트림에서 바이트 단위로 읽을 수 있습니다.
BufferedInputStream in = new BufferedInputStream(new URL("http://www.website.com/information.asp").openStream())
byte data[] = new byte[1024];
int count;
while((count = in.read(data,0,1024)) != -1)
{
out.write(data, 0, count);
}
답변
사용하는 경우 Java 7+
인터넷에서 파일을 다운로드하는 특정 디렉토리에 저장 사용을 다음과 같은 방법 :
private static Path download(String sourceURL, String targetDirectory) throws IOException
{
URL url = new URL(sourceURL);
String fileName = sourceURL.substring(sourceURL.lastIndexOf('/') + 1, sourceURL.length());
Path targetPath = new File(targetDirectory + File.separator + fileName).toPath();
Files.copy(url.openStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);
return targetPath;
}