【问题标题】:Java String return method does not returnJava String 返回方法不返回
【发布时间】:2014-06-17 06:47:53
【问题描述】:

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

【问题讨论】:

标签: java string file return


【解决方案1】:

ConfigFilePath 方法返回一个值。您必须将该返回值分配给变量path:

path = ConfigFilePath(path);

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

【讨论】:

    【解决方案2】:

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

    所以当你在这里初始化它时:

    path = prop.getProperty("diretory_csv");
    

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

    解决方案:

    获取ConfigFilePath方法的返回值

    path = ConfigFilePath(path);
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案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-variable 不会被方法调用更改。您的结果通过 return-value 传递 - 您忽略了它,而不是将其分配给您的 path-variable。

        总结一下:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-25
          • 2011-01-10
          • 2016-11-06
          • 2021-11-25
          • 2023-01-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多