Как передать значение классу из другого файла или командной строки

#java #apache-poi

#java #apache-poi

Вопрос:

Я написал Java-программу для объединения нескольких листов Excel в один Excel и сгенерировал jar, и я запускаю ее с помощью java -jar Merge_Excel.jar .

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Csv_Merge {
    public static void main(String[]args){
        try{

            File folder = new File("c:/test/");
            File[] listOfFiles = folder.listFiles();
            HSSFWorkbook workbook=new HSSFWorkbook();

            for (File file : listOfFiles) {


                if (file.isFile()) {

                    String thisline;
                    ArrayList<String> al = null;
                    ArrayList<ArrayList<String>> arlist = new ArrayList<ArrayList<String>>();

                    HSSFSheet sheet =  workbook.createSheet(file.getName());
                    FileInputStream fis = new FileInputStream(file);
                    BufferedReader br = new BufferedReader(new InputStreamReader(fis));

                    while ((thisline = br.readLine()) != null) {
                        al = new ArrayList<String>();
                        String strar[] = thisline.split(",");

                        for (int j = 0; j < 5; j  ) {
                            for (int k = 1; k < arlist.size(); k  ) {

                                ArrayList<String> ardata = (ArrayList<String>) arlist.get(k);

                                HSSFRow row = sheet.createRow((short) k);


                                for (int p = 0; p < ardata.size(); p  ) {

                                    HSSFCell cell = row.createCell((short) p);
                                    cell.setCellValue(ardata.get(p).toString());

                                }
                            }

                            al.add(strar[j]);

                        }

                        arlist.add(al);
                    }

                    fis.close();
                    FileOutputStream fileOut = new FileOutputStream("c:/test/new.xls");
                    workbook.write(fileOut);

                    fileOut.flush();
                    fileOut.close();
                    br.close();
                }
            }

            System.out.println("Your excel file has been generated!");

        } catch ( Exception ex ) {
            System.out.println(ex);

        }
    }
}
  

Мне нужно передать местоположение Excel path File folder = new File("c:/test/"); и новый объединенный путь к файлу FileOutputStream fileOut = new FileOutputStream("c:/test/new.xls"); из командной строки или из другого файла, просто путь.

Есть ли какой-либо способ сделать это

Спасибо

Ответ №1:

Вы можете передать путь к каталогу из command во время запуска jar и получить доступ к этому каталогу в основной программе Java, просто выполнив следующие шаги :

1) java -jar program-name.jar c:/test/

2)

 public static void main(String[]args) {
         String folderName = args[0];
         File folder = new File(folderName);
         File[] listOfFiles = folder.listFiles();
    }
  

Комментарии:

1. Я получаю эту ошибку после внесения этих изменений java.lang. Исключение ArrayIndexOutOfBoundsException: 1

2. @Pavan, к какому индексу вы обращаетесь, он должен быть равен 0, иначе будет сгенерировано ArrayIndexOutOfBoundsException.

3. я модифицировал следующим образом try{ String folderName = args[0]; File folder = new File(folderName); File[] listOfFiles = folder.listFiles(); HSSFWorkbook workbook=new HSSFWorkbook();

4. Можете ли вы изменить этот код в вопросе, чтобы я мог проверить, не допустил ли я каких-либо ошибок.

5. ошибка появляется, когда я ввожу эту часть кода String folderName = args[0]; File folder = new File(folderName);

Ответ №2:

Ну, один из способов сделать это с использованием аргументов командной строки, передав этот путь в основную функцию, и у вас должно получиться.