2011-11-30 37 views
52

tôi cần phải tạo ra một đối tượng File từ đối tượng URL Yêu cầu của tôi là tôi cần phải tạo ra một đối tượng tập tin của một hình ảnh web (nói Googles biểu tượng)Làm thế nào để tạo ra đối tượng tập tin từ đối tượng URL

URL url = new URL("http://google.com/pathtoaimage.jpg"); 
File f = create image from url object 
+0

có thể xây dựng? Bạn đang cố gắng đạt được điều gì? – MByD

+0

Tôi cũng khuyên bạn nên xem [câu hỏi này] (http://stackoverflow.com/questions/921262/how-to-download-and-save-a-file-from-internet-using-java) và kiểm tra xem nó có công việc cho bạn – MByD

Trả lời

72

Sử dụng Apache Common IO's FileUtils:

import org.apache.commons.io.FileUtils 

FileUtils.copyURLToFile(url, f); 

Phương pháp tải các nội dung của url và lưu nó vào f.

+12

Điều này có hiệu quả đối với tôi: 'URL url = URL mới (" http://www.mydomain.com/pathToFile/fileName.pdf "); Chuỗi tDir = System.getProperty ("java.io.tmpdir"); Đường dẫn chuỗi = tDir + "tmp" + ".pdf"; tệp = tệp mới (đường dẫn); file.deleteOnExit(); FileUtils.copyURLToFile (url, tệp); ' –

+0

@AdrienBe' FileUtils' gặp lỗi trong Eclipse, nó không hiển thị nhập. –

+1

'import org.apache.commons.io.FileUtils' sẽ thực hiện công việc, xem liên kết tới thư viện trong câu trả lời –

12

Trong để tạo ra một tập tin từ một URL HTTP bạn cần phải tải về các nội dung từ URL đó:

URL url = new URL("http://www.google.ro/logos/2011/twain11-hp-bg.jpg"); 
URLConnection connection = url.openConnection(); 
InputStream in = connection.getInputStream(); 
FileOutputStream fos = new FileOutputStream(new File("downloaded.jpg")); 
byte[] buf = new byte[512]; 
while (true) { 
    int len = in.read(buf); 
    if (len == -1) { 
     break; 
    } 
    fos.write(buf, 0, len); 
} 
in.close(); 
fos.flush(); 
fos.close(); 

các tập tin được tải về sẽ được tìm thấy tại thư mục gốc của dự án của bạn: {} dự án /downloaded.jpg

16

Bạn có thể sử dụng ImageIO để tải hình ảnh từ URL và sau đó ghi hình ảnh đó vào một tệp. Một cái gì đó như thế này:

URL url = new URL("http://google.com/pathtoaimage.jpg"); 
BufferedImage img = ImageIO.read(url); 
File file = new File("downloaded.jpg"); 
ImageIO.write(img, "jpg", file); 

Điều này cũng cho phép bạn chuyển đổi hình ảnh sang một số định dạng khác nếu cần.

+0

Có cách nào để tạo đối tượng tập tin từ BufferedImage bằng cách ghi nó vào đĩa – nidhin

+1

Một tệp theo định nghĩa cần được lưu trữ trên một số hệ thống tệp. Bạn sẽ cần một số hệ thống tập tin trong bộ nhớ để kết thúc với một tập tin không được duy trì. –

+0

bạn có nhận thấy câu trả lời được chấp nhận không? Tôi không biết FileUitls liệu có tạo ra một tập tin tạm thời cho điều đó không: P – nidhin

1
import java.net.*; 
import java.io.*; 
class getsize { 
    public static void main(String args[]) throws Exception { 
     URL url=new URL("http://www.supportyourpm.in/jatin.txt"); //Reading 
     URLConnection yc = url.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 
     String inputLine; 
     while ((inputLine = in.readLine()) != null) 
      System.out.println(inputLine); 
     in.close(); 

     //Getting size 
     HttpURLConnection conn = null; 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("HEAD"); 
     conn.getInputStream(); 
     System.out.println("Length : "+conn.getContentLength()); 
    } 
} 
+2

Bạn có thể định dạng mã này không? Thụt lề là tất cả các nơi. Và xin vui lòng thêm một số giải thích về những gì mã đang làm và làm thế nào nó giải quyết được câu hỏi. Các câu trả lời chỉ có mã được xóa thường xuyên. – Kenster

9
URL url = new URL("http://google.com/pathtoaimage.jpg"); 
File f = new File(url.getFile()); 
+4

Khi sử dụng phương pháp này cho tệp hệ thống tệp cục bộ có dấu cách trong đường dẫn đầy đủ,% 20 sẽ không tự động được chuyển đổi thành không gian và có thể gây ra ngoại lệ – Asu

4

Kể từ Java 7

File file = Paths.get(url.toURI()).toFile(); 
Các vấn đề liên quan