Mục tiêu: cho tệp, xác định xem nó có thuộc loại đã cho (XML, JSON, Thuộc tính, v.v.)Cách phát hiện các loại tệp tin một cách đáng tin cậy?
Xem xét trường hợp XML - Lên cho đến khi chúng tôi gặp phải vấn đề này, cách tiếp cận mẫu sau đây hoạt động tốt:
try {
saxReader.read(f);
} catch (DocumentException e) {
logger.warn(" - File is not XML: " + e.getMessage());
return false;
}
return true;
Như dự kiến, khi XML được định dạng tốt, kiểm tra sẽ vượt qua và phương pháp sẽ trả về đúng sự thật. Nếu một cái gì đó xấu xảy ra và tập tin không thể được phân tích cú pháp, false sẽ được trả về.
Tuy nhiên, sự cố này xảy ra khi chúng tôi xử lý tệp XML không đúng định dạng (vẫn là XML).
Tôi không muốn dựa vào .xml
mở rộng (không tất cả các thời gian), tìm kiếm <?xml version="1.0" encoding="UTF-8"?>
chuỗi bên trong các tập tin, vv
Có một cách khác để điều này có thể bị xử lý?
Bạn sẽ phải xem gì bên trong tệp để "nghi ngờ có thể là XML
mặc dù DocumentException
đã bị bắt". Điều này là cần thiết cho mục đích phân tích cú pháp.
Kinda liên quan: http://stackoverflow.com/questions/3600222/code-for-identifying-programming-language-in-a-text-file – PeterK
Bạn có thể' t nhận được câu trả lời dứt khoát cho "k ind của tập tin là nó? ", chỉ để" tôi có thể giả vờ nó là loại X? " (câu trả lời có thể là "có" không hoặc nhiều hơn X, không chỉ bằng 0 hoặc một).Nhưng bạn có thể ném số liệu thống kê và xem có nhiều '<\w+> '(có thể là XML), nhiều' "\ w +" '(có lẽ là JSON) so với tổng số mã thông báo và nếu không nó có thể là thuộc tính. – harold