有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java字符串返回方法不返回

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

  1. # 1 楼答案

    方法ConfigFilePath返回一个值。必须将该返回值赋给变量path

    path = ConfigFilePath(path);
    

    注意:尝试遵循Java命名约定。方法/变量使用mixedCase,类/接口使用CamelCase

  2. # 2 楼答案

    ConfigFilePath正在返回一个值。您应该从中获取结果并将其放入路径:

    public CSVFile(ManagedElement_T[] meInfo) {
        String path = ConfigFilePath(path);
        system.out.print("CSV "+path);
    }
    
  3. # 3 楼答案

    Java实际上是pass by value而不是pass by reference

    因此,当您在此处初始化它时:

    path = prop.getProperty("diretory_csv");
    

    路径实际上不会reference该值,但在out of scope时会被销毁

    解决方案

    获取ConfigFilePath方法的返回值

    path = ConfigFilePath(path);
    
  4. # 4 楼答案

    您面临的问题是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-value传递,您将忽略该值,而不是将其分配给path-variable

    总而言之:

    • ConfigFilePath()不需要参数,因为它没有使用传入的值
    • 必须将返回值分配给调用方法中的某个变量,才能使其发挥任何作用