2013-08-13 73 views
11

Tôi muốn kiểm tra xem tệp có được chuyển thành hình ảnh hay không và nếu không, tôi muốn hiển thị thông báo cho biết tệp không phải là hình ảnh.Cách kiểm tra xem tệp có phải là hình ảnh

try{ 
    Image img = ImageIO.read(new File(name)); 
}catch(IOException ex) 
{ 
    valid=false; 
    System.out.println("The file" + name + "could not be opened, it is not an image"); 
} 

Khi file (tham chiếu bởi name) không phải là một hình ảnh hợp lệ không được đặt để false, tại sao điều này xảy ra? Tôi có nên thay đổi loại ngoại lệ không? Tôi đã đọc về try-catch, và như tôi hiểu nếu ImageIO.read thất bại và loại ngoại lệ là nội dung IOException của khối catch sẽ được thực thi. Vậy tại sao nó không được thực hiện?

Có cách nào khác để kiểm tra xem tệp có phải là hình ảnh không ??

+0

@Gerret cảm ơn tôi đã tìm kiếm nhưng tôi không thấy bài đăng này – Alaa

+0

Liên kết này sẽ hữu ích cho bạn: http://stackoverflow.com/questions/9643228/test-if-file-is-an-image – Ruby

+0

Tôi đã đăng liên kết tương tự cách đây 22 phút;) – Gerret

Trả lời

25

Theo Javadocs, đọc nhuận null nếu file không thể đọc được dưới dạng hình ảnh.

Nếu không có đăng ký ImageReader nào có thể đọc kết quả luồng, null được trả lại.

Vì vậy, code của bạn nên được như sau:

try { 
    Image image = ImageIO.read(new File(name)); 
    if (image == null) { 
     valid = false; 
     System.out.println("The file"+name+"could not be opened , it is not an image"); 
    } 
} catch(IOException ex) { 
    valid = false; 
    System.out.println("The file"+name+"could not be opened , an error occurred."); 
} 
+1

Tôi nghĩ đây là phương pháp phù hợp nhưng không có lỗi nào. Hãy xem [this] (http://stackoverflow.com/questions/18079754/convert-and-display-image-from-byte-array?noredirect=1#comment26495118_18079754). Trong trường hợp này 'ImageIO' không thể đọc các tập tin hình ảnh ngay cả khi những tập tin đó thực sự là hình ảnh. – dic19

1

Sử dụng này để có được phần mở rộng:

String extension = ""; 

int i = fileName.lastIndexOf('.'); 
if (i > 0) { 
    extension = fileName.substring(i+1); 
} 

Và kiểm tra các điều kiện như u muốn

if(extension=="jpg"){ 
//your code 
} 

và vân vân

+3

Nếu tôi thay đổi phần mở rộng của hình ảnh từ .jpeg thành .mpeg thì sao? –

+0

Tôi không chắc chắn điều này sẽ luôn hoạt động. Một phần mở rộng có thể được thay đổi hoặc có thể vắng mặt. – VirtualTroll

+0

Nếu không có phần mở rộng thì sao? Điều đó có gây ra vấn đề ở đây không? Theo tôi biết, cách chính xác là kiểm tra loại mime. –

3

Theo API ImageIO.read(...) lợi nhuận null nếu không đăng ký ImageReader thể đọc các tập tin định được tìm thấy, vì vậy bạn chỉ có thể thử nghiệm trở lại kết quả cho null .

+0

Brent Worden nhanh hơn. Nhưng bạn là đúng :) –

+0

đó là lý do tại sao tôi đã bỏ phiếu cho cả hai câu trả lời và chấp nhận câu trả lời của mình^^ – Alaa

Các vấn đề liên quan