Enlaces en linux

Existen dos tipos de enlaces, los enlaces simbólicos y los enlaces duros (fuertes).

Cuando creamos un enlace simbólico significa que creamos un puntero a dicho fichero o directorio. Si borrases dicho fichero o directorio el enlace quedaría apuntando a la nada.

Por otra parte si creas un enlace duro, lo que hace es crear una copia del fichero o directorio, la ventaja de este tipo de enlace es que si modificas alguno de los dos siempre se modificaran los dos y si borras uno el otro no se perdería.
Normalmente no se hacen enlaces duros ya que implica tener duplicada la información ocupando espacio de manera innecesaria, por esta razón solo el root tiene permisos para hacer este tipo de enlaces.
Otra desventaja de los enlaces duros es que sólo se pueden hacer entre ficheros o directorios de una misma unidad.

El comando para crear enlaces es el siguiente:
ln -parámetro rutadirectorio nombre_enlace

Parámetros:
-s Para enlaces simbólicos
Si no ponemos ningún parámetro se crearía un enlace duro (fuerte).

Pasos para crear un zip en java sin guardarlo en un directorio temporal

-Crear un ZipOutputStream que referencia el destino. En el ByteArrayOutputStream se guardará el zip temporalmente.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(baos);


-Crear un InputStream (o derivado) que referencia un archivo a agregar al ZIP. En el EmbeddedObject se guarda el archivo que se quiere añadir al zip.
EmbeddedObject obj;
InputStream is = obj.getInputStream();


-Crear una ZipEntry que representa el InputStream. Al ZipEntry se le pasa el nombre como se quiere que se llame el fichero que se añadirá al zip.
zipEntry = new ZipEntry(«12354.xls»);

-Agregar el ZipEntry al ZipOutputStream llamando a su método putNextEntry().
zip.putNextEntry(zipEntry);

-Copiar datos del InputStream al ZipOutputStream (usando un buffer array de bytes para leer desde el InputStream y luego escribirlo en el ZipOutputStream).
byte[] buffer = new byte[2048];
int byteCount;
while (-1 != (byteCount = is.read(buffer))) {
zip.write(buffer, 0, byteCount);
}


-Cerrar la entrada zip actual y el InputStream para escribir la siguiente entrada al ZipOutputStream.
zip.closeEntry();
is.close();

-Al añadir todos los ficheros al zip, cerrar el ZipOutputStream.
zip.close();

HowTo: Trabajar con ficheros desde Oracle

Para el tratamiento de ficheros de texto desde un procedimiento de Oracle, hay que usar las funciones que proporciona el package UTL_FILE.

Más info sobre este package puede obtenerse de:
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/u_file.htm

La relación exacta de funciones y sus parámetros puede obtenerse de:
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/u_file2.htm#1000703

Para trabajar con ficheros, previamente se debe haber creado un «directorio». Un directorio es un objeto lógico que Oracle utiliza como intermediario entre el PL/SQL y el directorio físico.

Sólo los usuarios de sistema pueden crear directorios y conceder derechos al resto de los mortales. Por lo tanto, hay que solicitar a Centro de Información, Administrador si es el caso o sino crearlo con un usuario de sistema, la creación de dicho directorio, con sentencias como estas:

CREATE DIRECTORY DGQ_OFICINES AS ‘\\asf2\public\mi_directorio’;
GRANT READ ON DIRECTORY DGQ_OFICINES TO SIRA;
GRANT WRITE ON DIRECTORY DGQ_OFICINES TO SIRA;
(por supuesto, el usuario Oracle ha de tener acceso a dicho recurso físico, o éste debe tener acceso público)

Después, hay que usar DGQ_OFICINES, en las llamadas de las funciones (por ejemplo, en el FOPEN). Se ha de poner en mayúsculas.

Ejemplo de código que crea un fichero y escribe una línea:

procedure file_test as
ft utl_file.file_type;
begin
ft := utl_file.fopen(‘DGQ_OFICINES’,’test.txt’,’w’,500);
utl_file.put_line(ft,’hola’,false);
utl_file.fclose(ft);
end;

En este caso, este código abre un fichero (lo crea si no existe y lo machaca si existe).
FT es el handle al fichero. Se asigna con FOPEN y se usa en posteriores operaciones.

FOPEN recibe el nombre del directorio, el nombre del fichero, el modo (read, write o append), y el tamaño máximo de linea a escribir o leer del fichero.

PUT_LINE escribe un texto, añadiendo un separador de línea (hay otra función que no lo añade). Finalmente, el fichero se cierra con FCLOSE.