Java字符串返回方法不返回

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) {

我有一个方法返回文件夹路径的字符串。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

方法
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()
    不需要参数,因为它不使用传入的值
  • 必须将返回值分配给调用方法中的某个变量,才能使其发挥任何作用
可能的副本