2014-06-17 111 views
-1

我不得不返回文件夾路徑的字符串的方法。 CSVFile方法調用另一個方法ConfigFilePath提取從一個配置文件中的值,然後返回用於其他條件。Java的String返回方法不返回

public CSVFile(ManagedElement_T[] meInfo) { 
    String path = null; 
    ConfigFilePath(path); 
    system.out.print("CSV "+path); 
} 

public String ConfigFilePath(String path) { 
    final String directory = System.getProperty("user.dir"); 
    final String filename = "config.properties"; 
    final File configFile = new File(directory+"/"+filename); 

    final Properties prop = new Properties(); 
    InputStream input = null; 

    try { 
     input = new FileInputStream(configFile); 
     prop.load(input); 
     path = prop.getProperty("diretory_csv"); 
     System.out.println("PATH " + path); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } finally { 
      // Close the file 
    } 

    File checkPath = new File(path.toString()); 
    System.out.println("CHECK " + checkPath); 
    if (checkPath.exists()) { 
     System.out.println("Directory already exists ..."); 
    } else { 
      //mkdir if it does not exist 
    } 


    return path; 
} 

問題是,它不返回任何var路徑?當我打印出來,但ConfigFilePath方法中似乎得到了來自Eclipse中的打印基於正確的價值觀只是說空。

System.out.println("PATH " + path); = C:/opt/CORBA/input 
System.out.println("CHECK " + checkPath); = C:\opt\CORBA\input 
System.out.print("CSV "+path); = null 
+0

可能是[Java是「通過引用傳遞」還是「按值傳遞」?)(http://stackoverflow.com/questions/40480/is-java-pass-by-reference -or通按值) –

回答

2

的Java實際上是pass by valuepass by reference

,所以當你在這裏初始化它:

path = prop.getProperty("diretory_csv"); 

路徑不會真正reference那些重視,但被摧毀時out of scope

解決

獲取ConfigFilePath方法

path = ConfigFilePath(path); 
6

方法ConfigFilePath返回的值。你必須是返回的值賦給變量path

path = ConfigFilePath(path); 

注:儘量遵循Java的命名約定。使用mixedCase的方法/變量和類/接口

0

ConfigFilePath返回一個值,使用CamelCase。你應該從它那裏得到的結果,並把它的路徑:

public CSVFile(ManagedElement_T[] meInfo) { 
    String path = ConfigFilePath(path); 
    system.out.print("CSV "+path); 
} 
0

你所面臨的問題的返回值是Java是由價值,不傳遞方法參數參照。它可以是混亂的,因爲使用的對象類型時傳遞的值實際上是一個對象的引用。

讓我們看看你的代碼的某些行:

public String ConfigFilePath(String path) 

這裏你的方法被傳遞給一些String參考,並保持在名爲path一個局部變量。

path = prop.getProperty("diretory_csv"); 

現在你改變局部變量path指向一個新的String -object。

return path; 

這是傳遞參考作爲返回值。 ConfigFilePath的地方path -variable超出範圍。

ConfigFilePath(path); 

至於其他的答案說:在這行你調用方法傳遞一個參照StringCSVFile的地方path -variable引用。但是由於傳遞是有價值的,所以path-變量不會被方法調用改變。您的結果通過return值進行傳遞 - 而您忽略了該值,而不是將其分配給path-變量。

所以總結起來:

  • ConfigFilePath(),因爲它不使用在
  • 傳遞的值並不需要一個參數,你必須指定在調用方法的返回值的一些變量因爲它是有用的。