我有一个返回文件夹路径字符串的方法。 CSVFile方法调用另一个方法ConfigFilePath从配置文件中提取值并将其返回以用于另一个条件。
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路径?当我打印它时只是说null但是在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 :(得分:6)
方法ConfigFilePath
返回值。您必须将返回的值分配给变量path
:
path = ConfigFilePath(path);
注意:尝试遵循Java命名约定。对方法/变量使用mixedCase
,对类/接口使用CamelCase
答案 1 :(得分:2)
Java实际上是pass by value
而不是pass by reference
。
所以当你在这里初始化它时:
path = prop.getProperty("diretory_csv");
路径实际上不会reference
该值,但会在out of scope
时被销毁。
<强>溶液强>:
获取ConfigFilePath
方法的返回值
path = ConfigFilePath(path);
答案 2 :(得分:0)
ConfigFilePath返回一个值。您应该从中获取结果并将其放在路径中:
public CSVFile(ManagedElement_T[] meInfo) {
String path = ConfigFilePath(path);
system.out.print("CSV "+path);
}
答案 3 :(得分:0)
您遇到的问题是java传递方法参数按值,而不是按引用传递。它可能会令人困惑,因为在使用对象类型时,传递的值实际上是一个对象引用。
让我们看看代码的某些行:
public String ConfigFilePath(String path)
此处,您的方法会传递对某些String
的引用,并将其保存在名为path
的局部变量中。
path = prop.getProperty("diretory_csv");
现在您要将局部变量path
更改为指向新的String
- 对象。
return path;
这会将引用作为返回值传递出去。 ConfigFilePath
的本地path
- 变量超出了范围。
ConfigFilePath(path);
正如其他答案所说:在这一行中,您调用的方法是将String
的引用传递给CSVFile
的本地path
变量。但是由于传递值是path
- 变量不会被方法调用更改。您的结果是通过return
- 值传递的 - 您忽略了该结果,而不是将其分配给您的path
- 变量。
总结一下:
ConfigFilePath()
不需要参数,因为它没有使用