This document provides a high-level introduction to Apache Fesod (Incubating), a Java library for reading and writing spreadsheet files. It covers the project's purpose, architecture, and core capabilities. For detailed installation instructions and quick start examples, see Getting Started. For complete API documentation, see API Reference. For information about contributing to the project, see Development Guide.
Apache Fesod (Incubating) is a high-performance, memory-efficient Java library for reading and writing spreadsheet files (XLS, XLSX, CSV). The name "fesod" (pronounced /ˈfɛsɒd/) is an acronym for "fast easy spreadsheet and other documents", reflecting the project's core goals: performance, simplicity, and reliability.
The library addresses a common problem in Java spreadsheet processing: memory overflow when handling large files. By implementing streaming operations and intelligent memory management, Fesod can process files containing hundreds of thousands or millions of rows without consuming excessive memory.
Apache Incubation Status: Fesod is currently an Apache Incubator project, following Apache Software Foundation governance and release processes. The project previously existed as a non-Apache library and is now transitioning to full Apache governance. All future releases will follow Apache release procedures.
| Goal | Implementation |
|---|---|
| High Performance | Streaming architecture, optimized memory usage, intelligent caching |
| Ease of Use | Annotation-driven data mapping, fluent API, minimal boilerplate |
| Large File Support | Automatic memory/file hybrid caching, configurable memory thresholds |
| Reliability | Comprehensive testing (unit, fuzz, multi-JDK), Apache POI foundation |
Sources: README.md40-62 .asf.yaml20-22 website/docs/introduce.md10-32
Apache Fesod is structured as a Maven multi-module project with clear separation of concerns:
Module Responsibilities
The architecture diagram above shows the relationships between modules. Key modules include:
FesodSheet class) and all reading/writing functionalityorg.apache.fesod.shaded namespaceFor detailed module structure, see Project Structure.
Sources: README.md63-99 High-level architecture diagrams
The FesodSheet class serves as the unified entry point for all operations, replacing the deprecated FastExcel and FastExcelFactory classes from pre-Apache versions:
Basic Usage Pattern
Reading example:
Writing example:
For complete API documentation, see Reading API and Writing API.
Sources: README.md100-167 website/docs/introduce.md35-96
Apache Fesod is built on a foundation of Apache and open-source components:
| Component | Version | Purpose |
|---|---|---|
| Apache POI | 5.5.1 | XLS/XLSX format parsing and generation |
| Apache Commons Collections | 4.5.0 | Collection utilities |
| Apache Commons CSV | 1.14.1 | CSV format support |
| Apache Commons Lang3 | 3.18.0 | String and object utilities |
| Ehcache | 3.9.11 | Memory caching for large file handling |
| Spring Framework | (shaded) | Bytecode manipulation via ASM and CGLIB |
The fesod-shaded module uses Maven Shade Plugin to relocate Spring Framework classes (including ASM and CGLIB) into the org.apache.fesod.shaded namespace. This prevents classpath conflicts when consuming applications use different Spring versions.
Note: If your project already includes Apache POI dependencies, you may need to manually exclude POI artifacts to avoid version conflicts.
Sources: README.md69-71 High-level architecture diagram 2
A key differentiator of Fesod is its intelligent memory management for large files:
Automatic Strategy (Default)
Customizable Configuration
Users can override the default strategy using readCache() or readCacheSelector() methods:
For detailed memory tuning guidance, see Memory Management.
Sources: website/docs/sheet/help/large-data.md1-80
Apache Fesod supports three spreadsheet formats through format auto-detection:
| Format | Extension | Excel Version | Notes |
|---|---|---|---|
| XLS | .xls | Excel 97-2003 | Limited to ~65,536 rows, higher memory usage |
| XLSX | .xlsx | Excel 2007+ | Modern format, streaming-optimized |
| CSV | .csv | N/A | Plain text, configurable charset and delimiters |
Format detection is handled automatically by the ExcelTypeEnum class based on file extension or content inspection. For explicit format control, see File Format Support.
Sources: README.md54-61 .asf.yaml23-30
Apache Fesod maintains high code quality through comprehensive CI/CD pipelines:
Testing Strategy
fesod-sheet moduleFor testing contribution guidelines, see Testing Strategy. For CI/CD infrastructure details, see CI/CD Pipeline.
Sources: README.md29-33 High-level architecture diagram 3
| Fesod Version | JDK Support | Status |
|---|---|---|
| 1.3.x | JDK 8 - JDK 25 | Current |
| 1.2.x | JDK 8 - JDK 21 | Maintenance |
| 1.1.x | JDK 8 - JDK 21 | Legacy |
| 1.0.x | JDK 8 - JDK 21 | Legacy |
Minimum Requirement: Java 1.8 (Java 8)
Recommended: Latest LTS release (Java 21 as of 2024)
Apache Fesod uses Maven Central for distribution. The project is preparing its first Apache-compliant release under the Incubator. Previous non-Apache releases remain available but are not recommended for new projects.
Sources: README.md65-68 website/docs/quickstart/guide.md8-23
As an Apache Incubator project, Fesod follows Apache Software Foundation governance:
[email protected] for development discussionsContributing
Contributors are welcomed to join the project. The contribution workflow includes:
good first issue or help wantedFor detailed contribution guidelines, see Contributing. For Apache governance specifics, see Apache Governance.
Sources: README.md169-191 .asf.yaml34-49 CONTRIBUTING.md
Apache Fesod (Incubating) is licensed under the Apache License 2.0. All contributions must be compatible with this license.
Sources: README.md197-199 LICENSE
fesod-examples moduleSources: README.md100-167
Refresh this wiki
This wiki was recently refreshed. Please wait 7 days to refresh again.