Ir al contenido

FileUtils

Clase de utilidades que proporciona métodos estáticos de ayuda para operaciones comunes con ficheros: análisis de nombre y extensión, creación de ficheros y directorios temporales, lectura y escritura de ficheros, copia, detección de tipo MIME, comprobaciones de existencia, y más. Todos los métodos son estáticos.

Descripción:

Método Valores de retorno Descripción
getFileName(String file) String Devuelve el nombre del fichero sin su extensión. Si no hay extensión, devuelve el nombre original.
  • file: El nombre del fichero (con o sin ruta).

Ejemplo:

package com.openkm;
import com.openkm.util.FileUtils;
import com.openkm.util.PathUtils;
import java.io.File;
public class Test {
public static void main(String[] args) {
try {
File file = new File("/home/openkm/test.png");
String docName = PathUtils.getName(file.getPath());
String baseName = FileUtils.getFileName(docName);
System.out.println(baseName); // "test"
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
getFileExtension(String file) String Devuelve la extensión del fichero sin el punto inicial. Devuelve una cadena vacía si no hay extensión.
  • file: El nombre del fichero (con o sin ruta).

Ejemplo:

package com.openkm;
import com.openkm.util.FileUtils;
import com.openkm.util.PathUtils;
import java.io.File;
public class Test {
public static void main(String[] args) {
try {
File file = new File("/home/openkm/test.png");
String docName = PathUtils.getName(file.getPath());
String extension = FileUtils.getFileExtension(docName);
System.out.println(extension); // "png"
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
getParent(String file) String Devuelve la ruta del directorio padre de la ruta de fichero indicada. Devuelve el separador raíz si no hay padre.

Ejemplo:

String parent = FileUtils.getParent("/home/openkm/test.png");
System.out.println(parent); // "/home/openkm"

Descripción:

Método Valores de retorno Descripción
toValidFilename(String filename) String Elimina de la cadena indicada los caracteres reservados en los nombres de fichero de Windows (\ / : " * ? < > |).

Ejemplo:

String safe = FileUtils.toValidFilename("report: Q1/2024.pdf");
System.out.println(safe); // "report Q12024.pdf"

Descripción:

Método Valores de retorno Descripción
getFileNameNotDuplicatedInDestinationPath(String pathFile, String name, String ext) String Devuelve un nombre de fichero único en el directorio indicado. Si <name>.<ext> ya existe, añade un contador: <name>(1).<ext>, <name>(2).<ext>, etc.
  • pathFile: La ruta del directorio de destino.
  • name: El nombre de fichero deseado sin extensión.
  • ext: La extensión del fichero sin el punto inicial.

Ejemplo:

String unique = FileUtils.getFileNameNotDuplicatedInDestinationPath("/home/openkm", "report", "pdf");
System.out.println(unique); // "report.pdf" o "report(1).pdf" si ya existe

Descripción:

Método Valores de retorno Descripción
generateUniqueName(String basename) String Genera un nombre de fichero único anteponiendo la marca de tiempo actual (yyyyMMddHHmmss) al nombre base indicado.

Ejemplo:

String name = FileUtils.generateUniqueName("report.pdf");
System.out.println(name); // p. ej. "20240315143022report.pdf"

Creación de ficheros y directorios temporales

Sección titulada «Creación de ficheros y directorios temporales»

Descripción:

Método Valores de retorno Descripción
createTempDir() File Crea y devuelve un nuevo directorio temporal único usando el directorio temporal del sistema.

Ejemplo:

File tmpDir = FileUtils.createTempDir();
// usar tmpDir ...
FileUtils.deleteQuietly(tmpDir);

Descripción:

Método Valores de retorno Descripción
createTempFile() File Crea y devuelve un nuevo fichero temporal único con la extensión .tmp.

Descripción:

Método Valores de retorno Descripción
createTempFile(String ext) File Crea y devuelve un nuevo fichero temporal único con la extensión indicada.
  • ext: La extensión del fichero sin el punto inicial (p. ej. "pdf").

Descripción:

Método Valores de retorno Descripción
createSharedTempFile(String ext) File Crea un fichero temporal único en el directorio temporal compartido del repositorio (Config.REPOSITORY_TEMP_HOME). Úselo en despliegues multinodo donde se requiere un sistema de ficheros compartido.

Descripción:

Método Valores de retorno Descripción
createTempFileFromMime(String mimeType) File Crea un fichero temporal único cuya extensión se resuelve a partir del tipo MIME mediante el registro de tipos MIME de OpenKM. Recurre a .bin si no se encuentra el tipo MIME.

Ejemplo:

package com.openkm;
import com.openkm.util.FileUtils;
import java.io.File;
public class Test {
public static void main(String[] args) {
try {
File tmp = FileUtils.createTempFile("pdf");
System.out.println("Temp file: " + tmp.getAbsolutePath());
File tmpFromMime = FileUtils.createTempFileFromMime("application/pdf");
System.out.println("Temp from mime: " + tmpFromMime.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
createDateDir(String parent) File Crea y devuelve una estructura de directorios yyyy/MM/dd bajo la ruta padre indicada. El directorio se crea si no existe ya.

Descripción:

Método Valores de retorno Descripción
createDateUserDir(String parent) File Crea y devuelve una estructura de directorios yyyy/MM/dd/<username> bajo la ruta padre indicada, donde el nombre de usuario es el del usuario actualmente autenticado.

Ejemplo:

File dateDir = FileUtils.createDateDir("/home/openkm/uploads");
System.out.println(dateDir.getAbsolutePath()); // p. ej. "/home/openkm/uploads/2024/03/15"

Descripción:

Método Valores de retorno Descripción
readFileToByteArray(File file) byte[] Lee el contenido completo de un fichero en un array de bytes.

Descripción:

Método Valores de retorno Descripción
readFileToString(File file) String Lee el contenido completo de un fichero en un String usando codificación UTF-8.

Descripción:

Método Valores de retorno Descripción
readLines(File file) List Lee un fichero en una lista de líneas usando codificación UTF-8.

Descripción:

Método Valores de retorno Descripción
writeStringToFile(File file, String data) void Escribe un String en un fichero usando codificación UTF-8, creando o sobrescribiendo el fichero.

Ejemplo:

package com.openkm;
import com.openkm.util.FileUtils;
import java.io.File;
import java.util.List;
public class Test {
public static void main(String[] args) {
try {
File tmp = FileUtils.createTempFile("txt");
FileUtils.writeStringToFile(tmp, "Hello, OpenKM!\nLine 2");
String content = FileUtils.readFileToString(tmp);
System.out.println(content);
List<String> lines = FileUtils.readLines(tmp);
System.out.println("Lines: " + lines.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
copy(InputStream input, File output) void Copia el contenido de un InputStream a un fichero.

Descripción:

Método Valores de retorno Descripción
copy(Reader input, File output) void Copia el contenido de un Reader a un fichero usando codificación UTF-8.

Descripción:

Método Valores de retorno Descripción
copy(File input, OutputStream output) void Copia un fichero a un OutputStream.

Descripción:

Método Valores de retorno Descripción
copy(File input, File output) void Copia un fichero a otra ubicación de fichero.

Ejemplo:

package com.openkm;
import com.openkm.util.FileUtils;
import java.io.*;
public class Test {
public static void main(String[] args) {
try {
File source = new File("/home/openkm/source.pdf");
File dest = FileUtils.createTempFile("pdf");
FileUtils.copy(source, dest);
// Versión con stream
InputStream is = new FileInputStream(source);
File dest2 = FileUtils.createTempFile("pdf");
FileUtils.copy(is, dest2);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
deleteQuietly(File file) boolean Borra un fichero o directorio de forma recursiva sin lanzar excepciones. Devuelve true si el fichero se borró correctamente.

Descripción:

Método Valores de retorno Descripción
cleanDirectory(File dir) void Borra todos los ficheros y subdirectorios dentro de un directorio, dejando el propio directorio en su sitio.

Descripción:

Método Valores de retorno Descripción
deleteEmpty(File file) void Borra el directorio solo si está vacío. No hace nada si la ruta no es un directorio o no está vacía.

Descripción:

Método Valores de retorno Descripción
secureDelete(File file) boolean Sobrescribe el fichero con bytes aleatorios antes de borrarlo, reduciendo la posibilidad de recuperación de datos. Devuelve true si el fichero se borró.

Ejemplo:

File tmp = FileUtils.createTempFile("pdf");
// ... escribir datos sensibles en tmp ...
boolean deleted = FileUtils.secureDelete(tmp);
System.out.println("Securely deleted: " + deleted);

Descripción:

Método Valores de retorno Descripción
existFile(String file) boolean Devuelve true si la ruta indicada existe y es un fichero normal.

Descripción:

Método Valores de retorno Descripción
existFile(File file) boolean Devuelve true si el File indicado existe y es un fichero normal.

Descripción:

Método Valores de retorno Descripción
existDirectory(String dir) boolean Devuelve true si la ruta indicada existe y es un directorio.

Descripción:

Método Valores de retorno Descripción
existDirectory(File dir) boolean Devuelve true si el File indicado existe y es un directorio.

Ejemplo:

if (FileUtils.existFile("/home/openkm/config.properties")) {
System.out.println("Config file found");
}
if (FileUtils.existDirectory("/home/openkm/data")) {
System.out.println("Data directory exists");
}

Descripción:

Método Valores de retorno Descripción
listFiles(File dir, String[] extensions, boolean recursive) Collection Lista los ficheros de un directorio filtrados por extensión. Pase null en extensions para listar todos los ficheros.
  • dir: El directorio en el que buscar.
  • extensions: Array de extensiones para filtrar (sin puntos, p. ej. {"pdf", "docx"}), o null para todas.
  • recursive: Si se deben incluir los subdirectorios.

Ejemplo:

import java.util.Collection;
import java.io.File;
import com.openkm.util.FileUtils;
Collection<File> pdfs = FileUtils.listFiles(new File("/home/openkm/docs"), new String[]{"pdf"}, true);
System.out.println("PDF files found: " + pdfs.size());

Descripción:

Método Valores de retorno Descripción
countFiles(File dir) int Cuenta de forma recursiva todos los ficheros y directorios dentro del directorio indicado.

Descripción:

Método Valores de retorno Descripción
getMimeType(InputStream is) String Detecta el tipo MIME a partir de los bytes mágicos del stream usando Apache Tika. Devuelve null para tipos desconocidos en lugar de application/octet-stream.

Descripción:

Método Valores de retorno Descripción
getMimeType(File file) String Detecta el tipo MIME de un fichero a partir de sus bytes mágicos usando Apache Tika. Devuelve null para tipos desconocidos.

Descripción:

Método Valores de retorno Descripción
getMediaType(String mimeType) MediaType Convierte una cadena de tipo MIME (p. ej. "application/pdf") en un objeto MediaType de Spring. Devuelve MediaType.ALL si la cadena no contiene /.

Ejemplo:

package com.openkm;
import com.openkm.util.FileUtils;
import java.io.File;
public class Test {
public static void main(String[] args) {
try {
File file = new File("/home/openkm/document.pdf");
String mime = FileUtils.getMimeType(file);
System.out.println("MIME type: " + mime); // "application/pdf"
} catch (Exception e) {
e.printStackTrace();
}
}
}