Learn how to read and find empty rows in an Excel spreadsheet using several Java libraries.
Also find me here:
Baeldung Editor
Ashley Frieze
I've been writing software since I was a kid, and have been doing it professionally since the days of dial-up internet. These days I'm a consultant, helping teams with full stack cloud projects in Java and TypeScript. When I'm not software engineering, I can be found performing as a stand-up comedian, or in musical theater.
Here's what I've reviewed (so far):
Baeldung on Java
- All
- Core Java (24)
- Spring Boot (22)
- Testing (14)
- REST (9)
- Java (9)
- Spring Cloud (8)
- Java IO (8)
- Persistence (6)
- NoSQL (6)
- Java String (6)
- JVM (6)
- Spring Data (5)
- Java List (5)
- Web Services (4)
- Spring Security (4)
- Spring (4)
- Security (4)
- Maven (4)
- Logging (4)
- Groovy (4)
- Reactive (3)
- Java Streams (3)
- Java Dates (3)
- Java Concurrency (3)
- Java Array (3)
- Jackson (3)
- IDE (3)
- HTTP Client-Side (3)
- Data (3)
- Spring WebFlux (2)
- Spring Web (2)
- Java Numbers (2)
- Java Collections (2)
- JSON (2)
- JPA (2)
- DevOps (2)
- Cloud (2)
- XML (1)
- Spring MVC (1)
- Networking (1)
- Java Web (1)
- Java Map (1)
- Jakarta EE (1)
- Gradle (1)
- Architecture (1)
Using findValue() to Get the Value for a Nested Key in Jackson
Filed under Jackson
If we want to extract a value from deep inside a JSON document then Jackson provides us a couple of convenient ways to do so. We look at findValue() and an alternative with JSON Pointer.
Checking if an Element Exists With Selenium Webdriver
Filed under Testing
By default, Selenium prefers to throw an error when an element isn’t found when expected on a page. However, we can use it to detect the presence or absence of an element without error.
Integrate OpenAPI With Spring Cloud Gateway
Filed under Spring Cloud
Spring Cloud Gateway will aggregate all the OpenAPI specifications of the different microservices beneath it. We look at how to present the OpenAPI specification from a service and find it in the gateway.
How to Convert XLSX File to CSV in Java
Filed under Java IO
We may wish to convert the contents of an Excel sheet into a different format to make it easier to process. Learn how to read Excel documents and then output them as CSV.
Counting an Occurrence in an Array
Filed under Java Array
If we have a collection of elements we may wish to find the frequency of the different values. How to do this efficiently depends on the type of element and how many different values there may be.
IncompatibleClassChangeError in Java
Filed under Core Java
We may experience the IncompatibleClassChangeError when using extremely incompatible versions of libraries. We look at how this error occurs and how to fix it.
Consumer Acknowledgments and Publisher Confirms with RabbitMQ
Filed under Data
RabbitMQ doesn’t usually provide delivery guarantees. However, there are some features we can turn on to gain send and receipt acknowledgements. In this article, we explore these features and how to use them.
Implement Bulk and Batch API in Spring
Filed under REST, Spring Web
Learn to implement a REST controller that can optimize performance by accepting multiple requests in one call.
Baeldung on Linux
- All
- Files (18)
- Scripting (12)
- Administration (10)
- Security (6)
- Processes (5)
- Filesystems (5)
- Web (4)
- File Viewing (4)
- Networking (3)
- Network Configuration (3)
- Search (2)
- Package Management (2)
- File Editing (2)
- Docker (2)
- Building (2)
- User Administration (1)
- Text Processing (1)
- Installation (1)
- File Searching (1)
- File Permissions (1)
- File Conversion (1)
- File Compression (1)
- Boot Process (1)
Restrict SSH to the Local Network on Linux
Filed under Network Configuration, Security
As a rule, we must protect any open interfaces to our hosts against unauthorized access attempts. Restricting SSH to the local network is one way to do that. We look at how to set firewall rules and configure SSH itself.
List Supported Glyphs for a Font in Linux
Filed under Files
Fonts are collections of glyphs which map to characters that can be output. We look at how to build a script to show all the glyphs available in font files in Linux.
Setup DKIM, Postfix, and Mailman on Ubuntu
Filed under Installation, Web
We can build a secure email server by combining the capabilities of DKIM, Postfix, and Mailman. We look at how to set them up and get them working together.
How to Run BASIC Code in the Linux Terminal
We look at a couple of common implementations of Basic, how to install them, and how to run BASIC programs.
Fixing HTTPS Download Errors With wget
Filed under Web
When using wget to download files over https we may encounter some SSL errors. Learn how to resolve them.
Guide to Linux file Command With Examples
Filed under File Viewing
We can inspect the type of a file on our Linux filesystem using the Linux file command. We look at a few common use cases.
Guide to Linux ls Command With Examples
Filed under Files
The ls command shows us the files in a directoy. We look at many of its additional options that help us customise its output.
How to Remove Arduino Completely
Filed under Administration
You may wish to remove the Arduino software from your Linux system to clean up or to enable a fresh re-install. Explore a few ways to achieve this, depending on how it was originally installed.
Equivalent for “Set” Data Structure in Bash
Filed under Scripting
While Bash does not explicitly support a set collection type, it can still perform set operations. We look at a few ways to achieve this with Bash and other Linux tools.
Baeldung on Scala
- All
- Scala Basics (2)
- Scala Type System (1)
- Scala Collections (1)
- Play Framework (1)
Type Declaration in Scala
Filed under Scala Basics
A type alias is usually used to simplify declaration for complex types, such as parameterized types or function types. Explore examples and how they work.
Filter vs WithFilter
Filed under Scala Collections
Compare the differences of these two filtering functions for Scala collections.
Building a REST API in Scala with Play Framework
Filed under Play Framework
We build an example Scala REST API back end using The Play Framework. We cover the routes file and how to build simple controller functionality.
Mutability in Scala
Filed under Scala Basics
Mastering immutability allows us to reduce bugs caused when objects pass between functions or threads. Here we compare mutable and immutable objects in Scala.
Basics of Generics in Scala
Filed under Scala Type System
Generics allow us to maintain type safety while writing code that can be used with a variety of types. Here we explore generic classes and functions.
Baeldung on Computer Science
- All
- Core Concepts (1)
Difference Between Layers and Tiers
Filed under Core Concepts
Software can be thought of as having both layers and tiers. These concepts are often mixed up. We explore how the layers represent the logical architecture while the tiers represent the deployment architecture.
Baeldung on Kotlin
- All
- Libraries (2)
- Kotlin Collections (2)
- Asynchronous Programming (2)
- Spring (1)
- Kotlin Web (1)
- Kotlin Strings (1)
- Kotlin Functions (1)
- Kotlin Concurrency (1)
- Kotlin Classes and Objects (1)
Generating API Documentation from Swagger on Ktor
Filed under Kotlin Web
API documentation is a crucial aspect of any web service. We look at how to integrate OpenAPI documentation with ktor.
Sequentially Concatenate 2 Kotlin Flows
Filed under Asynchronous Programming
We may wish to process the contents of two flows sequentially. In this article, we look at a few ways to achieve this with built-in and external libraries.
An Introduction to kotlinx-serialization Project
Filed under Libraries
We can use kotlinx-serialization to serialize and deserialize objects of custom types. This tutorial shows how to do it.
Difference Between Flows and Channels in Kotlin
Filed under Kotlin Concurrency
Flows and channels allow Kotlin to process data. Here, we look at the differences between them.
Why We Should Avoid Using Open Members in Kotlin Constructors
Filed under Kotlin Classes and Objects
Using open members in constructors in Kotlin is possible but may lead to unexpected results. We look at how they work and how to avoid using them.
Convert a Kotlin Data Class Object to a Map
Filed under Kotlin Collections, Libraries
While a data class may be a useful strongly typed way to store date, we may wish to convert our data objects into a more dynamic structure, such as a Map. We look at a few solutions for converting between data classes and maps.
Remove a Character From a String in Kotlin
Filed under Kotlin Strings
When we need to remove characters from strings in Kotlin, there are a few extension functions we can use to help us. We look at the most common ways to produce a new string with a character removed.
Iterate Over a Map in Kotlin
Filed under Kotlin Collections
There are a few ways to iterate over the keys and values in a Kotlin map. We look at some of the options and which is more efficient at runtime.
Quick Guide to Kotlin Default and Named Arguments
Filed under Kotlin Functions
We can avoid providing long lists of inputs, or defining multiple overloads of a function, by using a combination of named parameters and defaults.
Baeldung on Ops
- All
- Docker (6)
- Kubernetes (2)
- Git (2)
- Jenkins (1)
- DevOps (1)
- Deployment Tools (1)
Running GitHub Actions in Another Directory
Filed under Git
We may have scripts that we wish to run in GitHub Actions from subdirectories of our GitHub repository. We look at how to achieve this with GitHub Actions.
How to Migrate States Between Workspaces in Terraform
Filed under Deployment Tools
We can move our Terraform state between workspaces. In this article, we look at how to do this with local and remote state files.
Guide to Updating a ConfigMap With kubectl
Filed under DevOps, Kubernetes
Depending on the tools available and whether we want to take down the Kubernetes application, we may choose to update its configuration a number of ways. We look at how to update the ConfigMap using kubectl.
How to Install an npm Package Directly From GitHub
Filed under Git
While node packages are usually fetched from the npm or yarn repositories, we can configure our package.json to use packages directly from GitHub. We look at how to do this for public and private GitHub repositories.
How to Get Java Heap Dump From Kubernetes Pod?
Filed under Kubernetes
When running Java applications in Kubernetes, we may wish to see a heap dump for diagnostic purposes. We look at how to extract a heap dump from a running pod.
Changing the Docker Image Installation Directory
Filed under Docker
After working with Docker for a while, we may wish to move its images directory somewhere else on the filesystem. We look at how to reconfigure Docker for a new image location.
Getting Docker Container ID from Container Name
Filed under Docker
For some Docker operations we need to know the ID of a particular container. We can find this out if we know the name of the container by using a few tricks.
How to Pass Environment Variable Value into Dockerfile
Filed under Docker
We can use environment variables when performing a docker build. These can be hard-coded into our Dockerfile, or passed as parameters into the build process. We look at how to use these techniques to build variations of image from the same Dockerfile.
How to Fix the “Name Already in Use by Container” Error in Docker
Filed under Docker
When running a docker container with a name we’ve used before, we’ll encounter an error. We look at a few ways to resolve this issue.
Baeldung on SQL
- All
- SQL Operators (1)
- Database Concepts (1)
Physical vs. Logical Deletion of Database Records
Filed under Database Concepts
Explore physical and logical methods of deleting database records.
Distinguishing Between UNION and UNION ALL Operations
Filed under SQL Operators
We can combine results from multiple queries using the UNION ALL operator. We look at how it works and how it differs from the UNION operator.