2013-10-16 24 views
38

Ben şu dizin düzeni kaynaklar dizin yolunu almak için: programlı

  • ana

    • src
      • java
      • kaynaklar
        • sql (veritabanı için komut dosyaları)
        • (yapılandırma) bir ServletContextListener sınıfı içerisinde
      • Webapp

ben SQL dizin ve listesi altında dosyalara erişmek isteyen

  • bahar onlar.

    File folder = new File(path); 
    File[] listOfFiles = folder.listFiles(); 
    

    Belki denemek ve resources/sql

    public void contextInitialized(ServletContextEvent event) { 
        event.getServletContext(); //(getRealPath etc.) 
    } 
    
    için bir yol inşa etmek ServletContextEvent Nesne kullanabilirsiniz: Ben kısaca bir dizinin altındaki dosyaları listeleme olduğunu biliyoruz çünkü Temelde benim sorunum, yol ile olan

    Bu yolu göreli, kodlanmamış bir şekilde ayarlamak için bir şey var mı? new File("classpath:sql") gibi bir şey (tercihen mümkünse yay) veya servletContext ile resources/sql noktasında ne yapmalıyım?

  • cevap

    28

    src/main/resources/'un içeriğinin, yapım süresinde .war'ın içinde WEB-INF/classes/'a kopyalandığını farz ediyorum. Bu durumda, sadece (sınıf adı ve yüklenmekte olan yol için gerçek değerler yerine) yapabilirsiniz.

    URL sqlScriptUrl = MyServletContextListener.class 
             .getClassLoader().getResource("sql/script.sql"); 
    
    +0

    Teşekkür !! Bu benim için çalıştı, o URL ile sonra yeni dosya için yol oluşturmak ve son olarak bu dizindeki dosyaları almak. – whyem

    +2

    Dosyaya ihtiyacınız yok. Zaten bir URL’niz var. Hatta bir dosya veya dizin olduğunu bile düşünemezsiniz. SAVAŞ paketten çıkarılmamış olabilir. – EJP

    +0

    MyServletContextListener ne anlama geliyor? –

    7
    import org.springframework.core.io.ClassPathResource; 
    
    ... 
    
    File folder = new ClassPathResource("sql").getFile(); 
    File[] listOfFiles = folder.listFiles(); 
    

    Bu konteyner (açılmış) senin savaş dosyası patladı eğer ClassPathResource.getFile() çalışır, Dağıtım işlemleri sınırlayacak dikkati çekiyor.

    34

    Sonunda yaptığım şey budur.

    private File getFileFromURL() { 
        URL url = this.getClass().getClassLoader().getResource("/sql"); 
        File file = null; 
        try { 
         file = new File(url.toURI()); 
        } catch (URISyntaxException e) { 
         file = new File(url.getPath()); 
        } finally { 
         return file; 
        } 
    } 
    

    ...

    File folder = getFileFromURL(); 
    File[] listOfFiles = folder.listFiles(); 
    
    +4

    "/ sql" 'parametresini parametre olarak kullandığınızdan emin misiniz? Bir başlangıç ​​çizgisi ile ilgili sorunlarım var, bunun yerine "sql" çalışıyor. – Abdull