Java String返回方法不返回

时间:2014-06-17 06:47:53

标签: 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) {
    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

4 个答案:

答案 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()不需要参数,因为它没有使用
  • 中传递的值
  • 您必须将返回的值分配给调用方法中的某个变量,以使其具有任何用途。