如何使用Apache POI在Excel中写入文件夹的所有内容?

我已将此代码编码为将所有文件和文件夹放在excel中的以下路径 C:\ Users \ hmoorthy \ workspace 中。但是变量 i 造成了一些问题。我发现,用于查找文件的递归 displayDirectoryContents(file,i)是否为目录,是否具有旧的 i 值,这会导致excel覆盖。因此,总文件数没有进入excel。

输出 文件夹:C:\ Users \ hmoorthy \ workspace.metadata 0 文件:C:\ Users \ hmoorthy \ workspace.metadata.bak_0.log 1 文件:C:\ Users \ hmoorthy \ workspace.metadata.lock 2 文件:C:\ Users \ hmoorthy \ workspace.metadata.log 3 文件夹:C:\ Users \ hmoorthy \ workspace.metadata.mylyn 4 文件夹:C:\ Users \ hmoorthy \ workspace.metadata.mylyn.tasklistIndex 5 文件:C:\ Users \ hmoorthy \ workspace.metadata.mylyn.tasklistIndex \ segments_1 6 文件:C:\ Users \ hmoorthy \ workspace.metadata.mylyn.tasklistIndex \ write.lock 7 文件:C:\ Users \ hmoorthy \ workspace.metadata.mylyn.tasks.xml.zip 7 文件夹:C:\ Users \ hmoorthy \ workspace.metadata.mylyn \ contexts 8 文件:C:\ Users \ hmoorthy \ workspace.metadata.mylyn \ repositories.xml.zip 10 文件:C:\ Users \ hmoorthy \ workspace.metadata.mylyn \ tasks.xml.zip 11 文件夹:C:\ Users \ hmoorthy \ workspace.metadata.plugins 6 文件夹:C:\ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services 7 文件夹:C:\ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel 8 文件:C:\ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel \ 1.artifact.sjo 9 文件:C:\ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel \ 1.command.sjo 10 文件:C:\ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel \ command.num 11 文件:C:\ Users \ hmoorthy \ workspace.metadata.plugins \ oracle.eclipse.tools.common.services \ CompareExcel \ project.num 12

您可以看到两次 i 打印11。因此,替换了excel中第11-1行的先前值。我要打印所有值。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class App2 {

    private static String dest = "C:\\Users\\hmoorthy\\test.xls";
    private static HSSFWorkbook myWorkBook = new HSSFWorkbook();
    private static HSSFSheet mySheet = myWorkBook.createSheet();

    public static void excelLog(String filename,String message,int rowNum) {

        HSSFRow myRow = null;
        HSSFCell myCell = null;
        String excelData[][] = new String[1][2];
        excelData[0][0] = filename;
        excelData[0][1] = message;

        myRow = mySheet.createRow(rowNum);

        for (int cellNum = 0; cellNum < 2; cellNum++) {
            myCell = myRow.createCell(cellNum);
            myCell.setCellValue(excelData[0][cellNum]);
        }
        try {
            FileOutputStream out = new FileOutputStream(dest);
            myWorkBook.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        int i = 0;
        File currentDir = new File("C:\\Users\\hmoorthy\\workspace");
        displayDirectoryContents(currentDir,i);
    }
    public static void displayDirectoryContents(File dir,int i) {
        try {
            File[] files = dir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    //System.out.println("folder:" + file.getcanonicalPath());
                    //System.out.println("file          "+i);
                    excelLog("Folder",file.getcanonicalPath(),i);
                    i=i+1;
                    displayDirectoryContents(file,i);
                    i=i+1;
                } else {
                    //System.out.println("file:" + file.getcanonicalPath());
                    excelLog("File ",i);
                    i=i+1;
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

谢谢;)

kingkong1900 回答:如何使用Apache POI在Excel中写入文件夹的所有内容?

测试是否适合您

public static void main(String[] args) {
    javax.swing.filechooser.FileNameExtensionFilter filtroExcel = new javax.swing.filechooser.FileNameExtensionFilter("Documento Microsoft Excel 2003/2013","xls");
    final JFileChooser miFile = new JFileChooser();
    miFile.setFileFilter(filtroExcel);
    int retornaValor = miFile.showSaveDialog(null);
    miFile.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    if (retornaValor == JFileChooser.APPROVE_OPTION) {
        FileOutputStream fileNew = null;
        File fileExcel = null;
        try{
            fileExcel = miFile.getSelectedFile();
            String nombre = fileExcel.getName();
            if (nombre.indexOf('.') == -1) {
                nombre += ".xls";
                fileExcel = new File(fileExcel.getParentFile(),nombre);
            }
            fileNew = new FileOutputStream(fileExcel);
            // header
            HSSFWorkbook book=new HSSFWorkbook();
            HSSFSheet sheet = book.createSheet("File List");
            CellStyle estilo=book.createCellStyle();
            estilo.setFillBackgroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
            HSSFFont fondo = book.createFont();
            fondo.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            estilo.setFont(fondo);
            estilo.setAlignment(CellStyle.ALIGN_CENTER);

            HSSFRow title = sheet.createRow((short) 0);
            HSSFCell celda = title.createCell((short) 0);
            celda.setCellStyle(estilo);
            celda.setCellValue("My file list");
            writeFiles(sheet,"C:\\Users\\hmoorthy\\workspace");

            book.write(fileNew);
        }
        catch(IOException ex){
            System.out.println(ex.getMessage());
        }
        finally {
            try {
                fileNew.close();
                // open file xls
                if (System.getProperty("os.name").equals("Linux"))
                    Runtime.getRuntime().exec("libreoffice " + fileExcel.getAbsolutePath());
                else
                    Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + fileExcel.getAbsolutePath());
            } 
            catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }
}

public static void writeFiles(HSSFSheet sheet,String path){
    File directorio=new File(path);
    if(directorio.exists()){
        File[] files=directorio.listFiles();
        for(int i=0;i<files.length;i++){
            try {
                if(files[i].isDirectory())
                    writeFiles(sheet,files[i].getCanonicalPath());
                else {
                    HSSFRow row=sheet.createRow((short)(i + 1));
                    HSSFCell celdasReg = row.createCell(0);
                    celdasReg.setCellValue(files[i].getCanonicalPath());
                }
            }
            catch (IOException ex){
                System.out.println(ex.getMessage());
            }
        }
    }
}
,

我得到了答案。感谢您的帮助:-)

要更新 i 值,我做了 displayDirectoryContents()函数以返回 i 值。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class writeExcel {

private static String dest = "C:\\Users\\hmoorthy\\test.xls";
private static HSSFWorkbook myWorkBook = new HSSFWorkbook();
private static HSSFSheet mySheet = myWorkBook.createSheet();

public static void excelLog(String filename,String message,int rowNum) {

    HSSFRow myRow = null;
    HSSFCell myCell = null;
    String excelData[][] = new String[1][2];
    excelData[0][0] = filename;
    excelData[0][1] = message;

    myRow = mySheet.createRow(rowNum);

    for (int cellNum = 0; cellNum < 2; cellNum++) {
        myCell = myRow.createCell(cellNum);
        myCell.setCellValue(excelData[0][cellNum]);
    }
    try {
        FileOutputStream out = new FileOutputStream(dest);
        myWorkBook.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    int i = 0;
    File currentDir = new File("C:\\Users\\hmoorthy\\workspace");
    displayDirectoryContents(currentDir,i);
}
public static int displayDirectoryContents(File dir,int i) {
    try {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("folder:" + file.getCanonicalPath()+"        "+i);
                //System.out.println("file          "+i);
                excelLog("Folder",file.getCanonicalPath(),i);
                i=i+1;
                i = displayDirectoryContents(file,i);
                //i=i+1;
            } else {
                System.out.println("file:" + file.getCanonicalPath()+"        "+i);
                excelLog("File ",i);
                i=i+1;
            }

        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return i;
}

}

本文链接:https://www.f2er.com/3159528.html

大家都在问