You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java将本地文件夹内的文件名复制到新建Excel工作表

问题排查与修复方案

原代码核心错误

  • 依赖缺失:代码中使用了Apache POI的XSSFWorkbook类,但没有导入对应的依赖包,编译阶段就会报错。
  • 格式混用:XSSFWorkbook是用于生成.xlsx格式Excel的类,不能直接输出为.csv格式文件,且你写入的是完全空白的工作簿,没有任何有效内容。
  • 资源提前关闭:输出流ExcelFile在写入空白工作簿后就被关闭,后续调用Files.copy使用已关闭的流必然执行失败。
  • 逻辑错误:Files.copy不能直接将文件夹的文件名列表写入目标文件,只会尝试复制文件夹的二进制内容,不符合你的需求。

修复代码(两种实现方案)

方案1:生成CSV文件(无需额外依赖,实现简单)

CSV本质是逗号分隔的文本文件,不需要引入POI依赖即可实现,代码如下:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileListFromFolder {
    public static void main(String[] args) {
        // 目标文件夹路径
        File demoFolder = new File("C:/Users/nikhil/Desktop/DemoFiles");
        // 输出CSV文件路径
        File csvFile = new File("C:/Users/nikhil/Desktop/hello.csv");
        
        // 判断文件夹是否存在
        if (!demoFolder.exists() || !demoFolder.isDirectory()) {
            System.out.println("目标文件夹不存在");
            return;
        }
        
        try (FileWriter writer = new FileWriter(csvFile)) {
            // 写入表头
            writer.write("文件名\n");
            // 遍历文件夹下所有文件
            File[] files = demoFolder.listFiles();
            if (files != null) {
                for (File file : files) {
                    // 只需要写入普通文件名、跳过子文件夹的话可加判断 if (file.isFile())
                    writer.write(file.getName() + "\n");
                }
            }
            System.out.println("文件名写入成功,文件路径:" + csvFile.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("写入文件出错:" + e.getMessage());
        }
    }
}

方案2:用Apache POI生成标准.xlsx格式Excel

如果需要生成标准Excel文件,需要先引入Apache POI的poi、poi-ooxml相关依赖,代码如下:

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class FileListFromFolder {
    public static void main(String[] args) {
        // 目标文件夹路径
        File demoFolder = new File("C:/Users/nikhil/Desktop/DemoFiles");
        // 输出Excel文件路径
        File excelFile = new File("C:/Users/nikhil/Desktop/hello.xlsx");
        
        if (!demoFolder.exists() || !demoFolder.isDirectory()) {
            System.out.println("目标文件夹不存在");
            return;
        }
        
        // 创建工作簿和工作表
        try (XSSFWorkbook workbook = new XSSFWorkbook();
             FileOutputStream outStream = new FileOutputStream(excelFile)) {
            XSSFSheet sheet = workbook.createSheet("文件名列表");
            // 创建表头行
            XSSFRow headerRow = sheet.createRow(0);
            headerRow.createCell(0).setCellValue("文件名");
            
            // 遍历文件写入行
            File[] files = demoFolder.listFiles();
            if (files != null) {
                int rowIndex = 1;
                for (File file : files) {
                    XSSFRow row = sheet.createRow(rowIndex++);
                    row.createCell(0).setCellValue(file.getName());
                }
            }
            // 自适应列宽
            sheet.autoSizeColumn(0);
            // 写入文件
            workbook.write(outStream);
            System.out.println("Excel生成成功,路径:" + excelFile.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("生成Excel出错:" + e.getMessage());
        }
    }
}

内容的提问来源于stack exchange,提问作者Nikhil Nbn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:09:02