#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:
Ну, один из способов сделать это с использованием аргументов командной строки, передав этот путь в основную функцию, и у вас должно получиться.