2013-02-19 68 views
0

大家好我有一個問題,我有一個屬性文件,該文件存儲的所有存儲位置,我用得到這個文件中的數據:問題使用屬性文件中分配一個值給一個變量

public void loadProp() { 
     System.out.println("Loading properties"); 
     InputStream in = this.getClass().getClassLoader().getResourceAsStream("config.properties"); //points to a properties file, this will load up destinations instead of having to declare them here 
     try { 
      configProp.load(in); 
      System.out.println(configProp.getProperty("destinationPDF")); 
      System.out.println(configProp.getProperty("destination")); 
      System.out.println(configProp.getProperty("fileList")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("called get username"); 
     username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); 
     System.out.println(username); 


    } 

我那麼做是爲了將該值賦給目的地

public String destination = configProp.getProperty("destination"); 

但每當我使用的目的地我得到一個空值,但是如果我使用configProp.getProperty(「目的地」)我得到的完整路徑,我是什麼?在這裏做錯了,因爲我希望價值是指向目的地,因爲其他類取決於它

編輯:

This class is called on by a command button (web app) 

    @ViewScoped 
    @ManagedBean(name = "fileUploadController") 
    public class FileUploadController { 

     public boolean isUploadComplete() { //to enable the next button once finished 
      return uploadComplete; 
     } 

     public void setUploadComplete(boolean uploadComplete) { 
      this.uploadComplete = uploadComplete; 
     } 

     public boolean isUploadComplete2() { 
      //to disable the file upload button, this will stop users uploading multiple files and over writing them as only the last file uploaded will be used 
      return uploadComplete; 
     } 

     public void setUploadComplete2(boolean uploadComplete) { 
      this.uploadComplete = uploadComplete; 
     } 
     /* 
     public void handleFileUpload(FileUploadEvent event) { 
     System.out.println("called"); 
     FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     } 
     } 
     */ 
     // 
     //Strings for fileUpload 
     //oadProp() 
     //public String fileList = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/Directory Files/directoryFiles.txt"; // 
     private Properties configProp = new Properties(); 

     @PostConstruct 
     //System.out.println(destinationPDF); 
     //System.out.println(destination); 
    // Get the username from the login page, this is used to create a folder for each user 
     public void loadProp() { 
      System.out.println("Loading properties"); 
      InputStream in = this.getClass().getClassLoader().getResourceAsStream("config.properties"); //points to a properties file, this will load up destinations instead of having to declare them here 
      try { 
       configProp.load(in); 
       System.out.println(configProp.getProperty("destinationPDF")); 
       System.out.println(configProp.getProperty("destination")); 
       System.out.println(configProp.getProperty("fileList")); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      System.out.println("called get username"); 
      username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); 
      System.out.println(username); 


     } 
//String destinationPDF = configProp.getProperty("destinationPDF"); Always makes a null no idea why yet 
    //private String destinationPDF = configProp.getProperty("destinationPDF"); 
    public String destination = configProp.getProperty("destination"); 
    private String username; 
    //public static String destination = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/uploaded/"; // main location for uploads//TORNADO ONLY //"D:/My Documents/NetBeansProjects/printing~subversion/fileupload/uploaded/"; // USE ON PREDATOR ONLY 
    public static String NewDestination; 
    public static String UploadedfileName; 
    public static String CompletefileName; 
    // 
    //Strings for file copy 
    // 
    //private String destinationPDF = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/"; //USE ON TORNADO//"D:/My Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/";//USE ON PREDATOR  
    private String NewdestinationPDF; 
    public static String PdfLocationViewable; 
    private boolean uploadComplete; 
    private boolean uploadComplete2; 

    // 
    public void File() { 

以上的代碼該類的第一比特

在控制檯輸出爲:

INFO: buttonToUploadText invoked 
INFO: Loading properties 
INFO: D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/ 
INFO: D:/Documents/NetBeansProjects/printing~subversion/fileupload/Uploaded/ 
INFO: D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/Directory Files/directoryFiles.txt 
INFO: called get username 
INFO: null 
INFO: destination is null 
+2

你在哪裏調用'loadProp'?你在構造點初始化變量(在構造函數的任何主體被調用之前) - 之後調用'loadProp'沒有意義... – 2013-02-19 16:25:28

+0

我在開始時調用了loadProp,它是第一件事當這個java類被調用時運行,是的,這是我的原始問題,但這是一個單獨的問題 – user2065929 2013-02-19 16:28:06

+0

@ user2065929:告訴我們如何調用'loadProp()'_on開始_...此代碼'public String destination = configProp.getProperty(「destination」);'get在構造函數之前執行... – jlordo 2013-02-19 16:29:03

回答

1

您的訂購已關閉。這是當你的bean由容器實例會發生什麼:

  1. 構造函數將被調用
  2. 所有注射領域將得到解決
  3. PostConstruct將被調用。

目前,你之前你的屬性設置destination已經裝起來。這個問題的一個非常簡單的解決方案是簡單地在您的@PostConstruct處理程序中設置destination值。這種方法比別人

@PostConstruct 
public void loadProp() { 
    InputStream in = this.getClass().getClassLoader() 
      .getResourceAsStream("config.properties"); 
    try { 
     configProp.load(in); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    destination = configProp.getProperty("destination"); 
} 

一個優點是,destination屬性將被正確地設置每次loadProp方法被調用時(而不是僅一次)。

+0

非常感謝!,兩個答案都有完美的工作,但選擇使用這一個,非常感謝花時間看我的代碼,並幫助我:) – user2065929 2013-02-19 16:47:08

+0

@ user2065929:也會選擇這一個;) – jlordo 2013-02-19 17:00:24

1

替換此線

public String destination = configProp.getProperty("destination"); 

public String destination; 

,並提供一個構造函數:現在

public FileUploadController() { 
    loadProp(); 
    this.destination = configProp.getProperty("destination"); 
} 

loadProp()將通過構造函數中調用,你不必這樣做了。

+0

非常感謝!,非常感謝花時間看我的代碼,並幫助我:) – user2065929 2013-02-19 16:47:39

相關問題