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