Импорт переменной java .io.File в другой класс - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два пакета в проекте Java.

Package A имеет класс с именем App.java. Этот класс принимает разбор аргументов (используя apache commons-cli lib).

Код

CommandLineParser clip = new DefaultParser();
Options options = new Options();
options.addOption("zp", "ZipFilePath", true, "Mention the path where zip file is present");
options.addOption("d", "dbPropFile", true, "Mention the path database property file");
options.addOption("h", "help", false, "This mentions how to use this utility");
CommandLine cli = clip.parse(options, args);
File dbpropFile = new File(cli.getOptionValue("d"));

Теперь, как я могу импортировать переменную dbPropFile в другой класс (SQLServerConn. java) пакета B?

package com.abc.integra.db.B;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import com.abc.integra.db.A.LoadDBProps;


public class SQLServerConn {

    public static Connection dbConn;
    public static Properties props;

    public static Connection getConn() {

        try {

            final String drivername = (String)SQLServerConn.props.get("drivername");
            final String url = (String)SQLServerConn.props.get("url");
            final String dbname = (String)SQLServerConn.props.get("dbname");
            final String username = (String)SQLServerConn.props.get("username");
            final String password = (String)SQLServerConn.props.get("password");
            //jasypt final String password1 = (String)SQLServerConn.props.getProperty(key);
            Class.forName(drivername); //registering the driver before connection with the DB
            SQLServerConn.dbConn = DriverManager.getConnection(url + ";databaseName=" + dbname + ";user=" + username + ";password=" + password);
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }

        return SQLServerConn.dbConn;
    }

    static {

        SQLServerConn.dbConn = null;
        try {
            final LoadDBProps lp = new LoadDBProps();
            SQLServerConn.props = lp.loadDBProperties(filename);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Я хочу подставить значение переменной dbpropFile вместо filename в разделе свойств загрузки.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы должны указать полный путь для импорта класса. Например:

import xx.A.App;

Теперь у вас есть доступ к классу App, вы можете использовать:

1) Объект App для доступа к publi c член класса ( состав ),

class App {
  File dbPropFile;
  CommandLineParser clip = new DefaultParser();
  public void setDbPropFile (String fileOption) {
       this.dbPropFile = new File(clip.getOptionValue(fileOption));
  }

  public File getDbPropFile () {
       return dbPropFile;
  }
}

public class SQLServerConn {
  App app = new App();
  app.setDbPropFile("d");
  SQLServerConn.props = lp.loadDBProperties(app.getDbPropFile());
}

2) Прямое имя класса для доступа к stati c и publi c Члены класса.

class App {
  static File dbpropFile = new File(cli.getOptionValue("d"));
}

class SQLServerConn  {
   SQLServerConn.props = lp.loadDBProperties(App.dbpropFile); // exact class name to access static variable
}

Если вы просите импортировать только одно свойство dbpropFile, это невозможно в java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...