2016-04-06 13 views
0

(geçici klasörde saklanan bir dosyanın olup) projemde bir dosyanın mutlak yolunu almak için:nasıl kullanıyorum

  • Eclipse Java EE IDE Web Geliştiricileri versiyonu için: Mars.2 Release (4.5.2);
  • Apache Tomcat v8.0; Bir Web Dinamik projesi; Bir Java Servlet'i
  • .

ben ./WebContent klasörde depolanan bir JSON dosyası var.

ServletContext sc = request.getSession().getServletContext(); 


    //String absolutePath = "/Users/kazuhira/Documents/MAC_workspace/lab2_calendario/WebContent/Database/Events.json"; 
    String relativePath = "eventsBackup.json"; 
    String filePath = sc.getRealPath(relativePath); 

    System.out.println("(saverServlet): the path of the file is "+filePath); 
    //System.out.println("(saverServlet): the path of the file is "+absolutePath); 

    //File file = new File(absolutePath); 
    String content = request.getParameter("jsonEventsArray"); 

    try (FileOutputStream fop = new FileOutputStream(file)) { 
     System.out.println("(saverServlet): trying to access to the file"+filePath); 
     // if file doesn't exists, then create it 
     if (!file.exists()) { 
      System.out.println("(saverServlet): the file doesn't exists"); 
      file.createNewFile(); 
      System.out.println("(saverServlet): file "+filePath+" created"); 
     } 

     System.out.println("(saverServlet): writing on the file "+filePath); 

     // get the content in bytes 
     byte[] contentInBytes = content.getBytes(); 

     fop.write(contentInBytes); 
     fop.flush(); 
     fop.close(); 

     System.out.println("(saverServlet): events backup done"); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

ve relativePath yeniden düzenleme dosya yoludur: Ben bu şekilde JSON dosyasının mutlak yolunu almak çalışıyorum

String filePath = sc.getRealPath(relativePath); geçici klasörde bir yol oluşturur Neden
/Users/kazuhira/Documents/MAC_workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/lab2_calendario/testJson.txt 

? Bu bağlamda, içeriği "gerçek" json dosyasında yapılandırabilirim (projede yarattığımın aynısı)?

Tomcat'in geçici bir bağlamda çalıştığını düşünüyorum, neden? Projenin aynı klasörünü kullanmasını söylemenin bir yolu var mı?

+0

ikinci seçeneği Evet, neden sen mutlak bir yol kullanmak istiyorsunuz ? Eclipse'de tomcat-runtime altında bir uygulamayı çalıştırdığınızda "/" – Sampada

+0

URL'sini kullanırsanız, WEB-INF altında tutulan tüm dosyalar sunucu uygulamanız için görünür olacaktır. Bir IDE altında, uygulamayı bitirdikten ve WAR olarak ihraç edildikten sonra, çalışan bir Tomcat'da konuşlandırıldı, dosyalar webapps dir'de kalmaya devam edecek, bu yüzden endişelenecek bir şey yok -i think- – Yazan

+0

@SampadaWagde Bu Tüm uygulamayı aynı dosyadan kullanmak için bir geçici çözüm. Örneğin, AJAX çağrılarını (bazen GET yöntemiyle ve bazen POST yöntemiyle) kullanarak birçok kez json dosyasını yükleyen bir JavaScript işlevi vardır. Bazı garip statik dosya problemleri vardır: her ajax çağrısına rağmen json dosyasının URL'si aynıdır, uygulamanın davranışı gariptir, bence yüklenen dosya her defasında aynı değildir (bazı zamanlar eski sürümlerini yükler. dosya ve bazen değil). Ben deliriyorum. – kitsune

cevap

1

Eclipse

daki Sunucu yapılandırmasında bir seçenek değiştirerek

enter image description here

radyo düğmesi listesinden :)

+0

Durumumda Servis Noktalarındaki seçenekler engellendi. Bilmiyorum çünkü bu seçeneği değiştiremiyorum. – kitsune

+0

evet, sunucu fisrtini durdurup, tüm webapp'u temizlemelisiniz (sunucu satırına sağ tıkladıktan sonra "Ekle ve kaldır", sonra projelerinizi seçin ve kaldırmaya tıklayın), şimdi tekrar sağ tıklayın ve sunucuyu temizleyin. . Öyleyse bu iyi düzenlenebilir –

+0

Evet, tam olarak: (1) sunucuyu durdur, (2) sunucudaki uygulamaları kapat, (3) yayınla ve son olarak konfigürasyonları değiştirebilirim. Teşekkürler! – kitsune