diff --git a/src/main/java/org/warp/commonutils/functional/IOTriConsumer.java b/src/main/java/org/warp/commonutils/functional/IOTriConsumer.java
new file mode 100644
index 0000000..6b496a3
--- /dev/null
+++ b/src/main/java/org/warp/commonutils/functional/IOTriConsumer.java
@@ -0,0 +1,55 @@
+package org.warp.commonutils.functional;
+
+import java.io.IOException;
+import java.util.Objects;
+import java.util.function.Consumer;
+
+/**
+ * Represents an operation that accepts three input arguments and returns no
+ * result. This is the three-arity specialization of {@link Consumer}.
+ * Unlike most other functional interfaces, {@code TriConsumer} is expected
+ * to operate via side-effects.
+ *
+ *
This is a functional interface
+ * whose functional method is {@link #accept(Object, Object, Object)}.
+ *
+ * @param the type of the first argument to the operation
+ * @param the type of the second argument to the operation
+ * @param the type of the thord argument to the operation
+ *
+ * @see Consumer
+ * @since 1.8
+ */
+@FunctionalInterface
+public interface IOTriConsumer {
+
+ /**
+ * Performs this operation on the given arguments.
+ *
+ * @param t the first input argument
+ * @param u the second input argument
+ * @param v the third input argument
+ */
+ void accept(T t, U u, V v) throws IOException;
+
+ /**
+ * Returns a composed {@code TriConsumer} that performs, in sequence, this
+ * operation followed by the {@code after} operation. If performing either
+ * operation throws an exception, it is relayed to the caller of the
+ * composed operation. If performing this operation throws an exception,
+ * the {@code after} operation will not be performed.
+ *
+ * @param after the operation to perform after this operation
+ * @return a composed {@code TriConsumer} that performs in sequence this
+ * operation followed by the {@code after} operation
+ * @throws NullPointerException if {@code after} is null
+ */
+ default IOTriConsumer andThen(IOTriConsumer super T, ? super U, ? super V> after) {
+ Objects.requireNonNull(after);
+
+ return (l, r, u) -> {
+ accept(l, r, u);
+ after.accept(l, r, u);
+ };
+ }
+}