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.
Utilidades de nombre y ruta
Sección titulada «Utilidades de nombre y ruta»getFileName
Sección titulada «getFileName»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(); } }}getFileExtension
Sección titulada «getFileExtension»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(); } }}getParent
Sección titulada «getParent»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"toValidFilename
Sección titulada «toValidFilename»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"getFileNameNotDuplicatedInDestinationPath
Sección titulada «getFileNameNotDuplicatedInDestinationPath»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 existegenerateUniqueName
Sección titulada «generateUniqueName»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»createTempDir
Sección titulada «createTempDir»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);createTempFile
Sección titulada «createTempFile»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| createTempFile() | File | Crea y devuelve un nuevo fichero temporal único con la extensión .tmp. |
createTempFile (con extensión)
Sección titulada «createTempFile (con extensión)»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").
createSharedTempFile
Sección titulada «createSharedTempFile»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. |
createTempFileFromMime
Sección titulada «createTempFileFromMime»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(); } }}Creación de directorios
Sección titulada «Creación de directorios»createDateDir
Sección titulada «createDateDir»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. |
createDateUserDir
Sección titulada «createDateUserDir»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"Lectura y escritura de ficheros
Sección titulada «Lectura y escritura de ficheros»readFileToByteArray
Sección titulada «readFileToByteArray»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. |
readFileToString
Sección titulada «readFileToString»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. |
readLines
Sección titulada «readLines»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. |
writeStringToFile
Sección titulada «writeStringToFile»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(); } }}Operaciones de copia
Sección titulada «Operaciones de copia»copy (InputStream a File)
Sección titulada «copy (InputStream a File)»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| copy(InputStream input, File output) | void | Copia el contenido de un InputStream a un fichero. |
copy (Reader a File)
Sección titulada «copy (Reader a File)»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. |
copy (File a OutputStream)
Sección titulada «copy (File a OutputStream)»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| copy(File input, OutputStream output) | void | Copia un fichero a un OutputStream. |
copy (File a File)
Sección titulada «copy (File a File)»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(); } }}Operaciones de borrado
Sección titulada «Operaciones de borrado»deleteQuietly
Sección titulada «deleteQuietly»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. |
cleanDirectory
Sección titulada «cleanDirectory»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. |
deleteEmpty
Sección titulada «deleteEmpty»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. |
secureDelete
Sección titulada «secureDelete»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);Comprobaciones de existencia
Sección titulada «Comprobaciones de existencia»existFile
Sección titulada «existFile»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. |
existFile (File)
Sección titulada «existFile (File)»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. |
existDirectory
Sección titulada «existDirectory»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| existDirectory(String dir) | boolean | Devuelve true si la ruta indicada existe y es un directorio. |
existDirectory (File)
Sección titulada «existDirectory (File)»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");}Listado y conteo de ficheros
Sección titulada «Listado y conteo de ficheros»listFiles
Sección titulada «listFiles»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"}), onullpara 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());countFiles
Sección titulada «countFiles»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. |
Detección de tipo MIME
Sección titulada «Detección de tipo MIME»getMimeType (InputStream)
Sección titulada «getMimeType (InputStream)»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. |
getMimeType (File)
Sección titulada «getMimeType (File)»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. |
getMediaType
Sección titulada «getMediaType»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(); } }}