2016-04-02 27 views
29

Tôi đang làm việc trên một ứng dụng Khởi động mùa xuân. Tôi cần phân tích cú pháp một tệp XML (countries.xml) khi bắt đầu. Vấn đề là tôi không hiểu nơi để đặt nó để tôi có thể truy cập nó. cấu trúc thư mục của tôi làTruy cập khởi động mùa xuân tài nguyên tĩnh thiếu scr/main/resources

ProjectDirectory/src/main/java 
ProjectDirectory/src/main/resources/countries.xml 

ý tưởng đầu tiên của tôi là đặt nó trong src/main/nguồn lực, nhưng khi tôi cố gắng tạo File (countries.xml) tôi nhận được một NPE và stacktrace cho thấy rằng tập tin của tôi là nhìn vào ProjectDirectory (vì vậy src/main/resources/không được thêm vào). Tôi đã cố gắng tạo File (resources/countries.xml) và đường dẫn sẽ trông giống như ProjectDirectory/resources/countries.xml (do đó một lần nữa src/main không được thêm vào).

Tôi đã thử thêm này không có kết quả

@Override 
public void addResourceHandlers(final ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    super.addResourceHandlers(registry); 
} 

Tôi biết rằng tôi có thể thêm src/main/bằng tay, nhưng tôi muốn hiểu tại sao nó không làm việc như nó phải. Tôi cũng đã thử các ví dụ với ResourceLoader - với cùng một kết quả.

Có ai có thể đề xuất vấn đề là gì không?

UPDATE: Chỉ cần để tham khảo trong tương lai - sau khi xây dựng dự án, tôi gặp phải vấn đề với việc truy cập tập tin, vì vậy tôi đã thay đổi File để InputStream

InputStream is = new ClassPathResource("countries.xml").getInputStream(); 
+0

Bạn có đang thêm tệp này vào tệp web.xml hoặc bất kỳ tệp cấu hình nào để cho ứng dụng biết không. – LearningPhase

+0

Chỉ thêm tệp vào thư mục sẽ không giúp ứng dụng quét tệp – LearningPhase

+0

Tôi không có tệp web.xml , Tôi có cấu hình dựa trên Java. Bạn có thể vui lòng cho tôi biết tôi nên tính đến điều gì không? Có lẽ bạn có bất kỳ mẫu? Tôi sẽ rất biết ơn!!! – lenach87

Trả lời

47

Chỉ cần sử dụng mùa xuân loại ClassPathResource.

File file = new ClassPathResource("countries.xml").getFile(); 

Miễn là tệp này ở đâu đó trên classpath Spring sẽ tìm thấy. Đây có thể là src/main/resources trong quá trình phát triển và thử nghiệm. Trong sản xuất, nó có thể là thư mục đang chạy.

+0

Cảm ơn bạn rất RẤT NHIỀU !! Điều này thực sự đã cứu tôi! Nó hoạt động như mong đợi bây giờ – lenach87

+0

làm thế nào có thể chuyển đổi tệp này sang JSonObejct? (tại dữ liệu đầu tiên là JSONobject) – Kenji

+0

Chỉ cần thêm vào câu trả lời của @luboskrnac, cũng thử sử dụng 'File file = new ClassPathResource (". \ countries.xml "). getFile();' –

6

Để có được các tập tin trong classpath:

Resource resource = new ClassPathResource("countries.xml"); 
File file = resource.getFile(); 

Để đọc các tập tin onStartup sử dụng @PostConstruct:

@Configuration 
public class ReadFileOnStartUp { 

    @PostConstruct 
    public void afterPropertiesSet() throws Exception { 

     //Gets the XML file under src/main/resources folder 
     Resource resource = new ClassPathResource("countries.xml"); 
     File file = resource.getFile(); 
     //Logic to read File. 
    } 
} 

Đây là một Small example để đọc một tập tin XML trên mùa xuân Boot App khởi động.

+0

Cảm ơn bạn đã trả lời! Phần đầu tiên, như đề nghị của bạn và luboskrnac đã cứu tôi! – lenach87

+0

@ElenaChubukina Hãy xem ví dụ mẫu.Bạn nói bạn cần phân tích cú pháp xml khi khởi động .... –

+0

Cảm ơn bạn! Phần với phân tích cú pháp tập tin không phải là một vấn đề (chỉ có một phần với việc tìm kiếm tập tin trên classpath) - Tôi sử dụng CommandLineRunner, nó hoạt động tốt cho tôi – lenach87

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