Show Menu
Cheatography

Java Files Cheat Sheet Cheat Sheet (DRAFT) by

A cheat sheet containing the most important information for Files usage in Java

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Java Files

File es una forma de refere­nciar de un ruta en un sistema de ficheros. Esta ruta puede no existir física­mente o podría ser la ruta corres­pon­diente con un directorio (carpeta).

Tipos de refere­ncias

Absoluta: empieza en la unidad de almace­nam­iento
Ej:"­C:­\\ca­rpe­ta­\\fi­che­ro.t­xt­"

Relativa: Buscan archivos dentro de la carpet­a/p­aquete donde se ejecuta el programa.
Ej: carpet­a/f­ich­ero.txt

//aver­iguar cuál es el directorio actual de trabajo
System.ge­tPr­ope­rty­("us­er.d­ir­"));

Constr­uctores

File(String pathname)
File(String directorio, String nombreArchivo)

Inicia­lizar File

File nameFile = new File(S­tring path);

Métodos File

create­New­File()
si no existe, lo crea
delete()
borra
isDire­ctory()
true si referencia a un directorio
isFile()
true si referencia a un archivo
mkdir()
crea el directorio
mkdirs()
crea todos los direct­orios necesarios para crear un fichero cuya ruta coincida con la repres­entada
length()
tamaño
listFi­les()
array File[] con los archivos del directorio
canExe­cute(), canRead(), canWrite()
true cuando se tiene permisos de ejecución, lectura o escritura sobre un fichero

Array archivos de un directorio

File directorio = new File("C­:/");
File[] lista;
if ((dire­cto­rio.ex­ists()) && (direc­tor­io.i­sD­ire­cto­ry())){
 ­lista = direct­ori­o.l­ist­Fil­es();
}else{
 ­Sys­tem.ou­t.p­rin­tln­("El directorio no existe­");
}

Flujo de datos/­Stream

Representa cualquier fuente que propor­cione datos al programa, o cualquier sumidero que tome datos del programa.

Flujo de datos binario/ de bytes: inform­ación en formato binario. más compacto. Objetos deben ser serial­iza­bles.
Flujo de datos de texto: inform­ación en formato de texto. Más fácil de leer desde otros lenguajes.
Flujo de entrad­a/Input: flujos que propor­cionan datos.
Flujo de salida­/Output: el programa escribe datos

Jerarquía Entrad­a/S­alida en binario

Output:
Datos primitivos:FileO­utp­utS­tream -> DataOu­tpu­tStream
Objetos:FileO­utp­utS­tream -> Object­Out­put­Stream (Objetos serial­iza­bles)
Input:
Datos primitivos:FileI­npu­tStream -> DataIn­put­Stream
Objetos:FileI­npu­tStream -> Object­Inp­utS­tream (Objetos serial­iza­bles)
 

Métodos Output­Stream y Writer

close()
cierra el flujo y libera recursos
flush()
sincroniza este flujo de datos con el dispos­itivo al cual se están escrib­iendo los datos
write(­byte[] b)
escribe el array
write(­byte[] b, int off, int len)
escribe len bytes del array b, empezando a escrib­irlos en el offset indicado por off
abstract void write(int b)
escribe 1 byte
Clase abstracta que representa un flujo de datos de salida binario cualquiera

Salida de bytes

Salida de bytes

File f1 = new File("s­rc/­mai­n/r­eso­urc­es/­Fil­e.c­sv");
FileOu­tpu­tStream fout = null;
DataOu­tpu­tStream dout = null;
Object­Out­put­Stream oout = null;

try {
 if (f1.cr­eat­eNe­wFi­le()) {
 ­ ­Sys­tem.ou­t.p­rin­tln­("Se ha creado el archiv­o");
 }
 fout = new FileOu­tpu­tSt­rea­m(f1);
 dout = new DataOu­tpu­tSt­rea­m(f­out);
 oout = new Object­Out­put­Str­eam­(fout);

 ­dou­t.w­rit­eCh­ar(­'a');
 ­dou­t.w­rit­eBo­ole­an(­true);
 ­dou­t.w­rit­eIn­t(34);
 ­dou­t.w­rit­eFl­oat­(34.4f);
 ­oou­t.w­rit­eOb­jec­t(new Date());
 ­oou­t.w­rit­eOb­jec­t(new Objeto­Pru­eba(4, "­hol­a"));
 ­dou­t.w­rit­eBy­tes­("ho­la");

} catch (IOExc­eption e) {
 ­throw new Runtim­eEx­cep­tio­n(e);
} finally{
 ­if(oout != null){
 ­ try{
 ­ ­ ­oou­t.c­lose();
 ­ ­}catch (IOExc­eption ex)
 ­ ­ ­ex.p­ri­ntS­tac­kTr­ace();
 ­ }
 }
 ­if(fout != null){
 ­ try{
 ­ ­ ­oou­t.c­lose();
 ­ ­}catch (IOExc­eption ex)
 ­ ­ ­ex.p­ri­ntS­tac­kTr­ace();
 ­ }
 }
 ­if(dout != null){
 ­ try{
 ­ ­ ­oou­t.c­lose();
 ­ ­}catch (IOExc­eption ex)
 ­ ­ ­ex.p­ri­ntS­tac­kTr­ace();
 ­ }
 }
}

//Clase Objeto­Prueba
class Objeto­Prueba implements Serial­izable {
 ­private int a;
 ­private String b;

 ­public Objeto­Pru­eba(int a, String b) {
 ­ ­this.a = a;
 ­ ­this.b = b;
 }
 ­@Ov­erride
 ­public String toString() {
 ­ ­return a+", "+b;
 }
}

Salida de texto

Writer representa cualquier flujo de datos de salida donde la info. se va a repres­entar en modo texto.

Salida Texto

import java.io.*;
public class Ejemplo5 {
 ­public static void main(S­tring[] args) {
 ­ File file = new File("C­:/d­ato­s.t­xt");
 ­ ­Pri­ntW­riter printW­riter = null;
 ­ try {
 ­ ­ ­pri­ntW­riter = new PrintW­rit­er(­file);
 ­ ­ ­pri­ntW­rit­er.p­ri­ntl­n(25);
 ­ ­ ­pri­ntW­rit­er.p­ri­ntl­n(2.5);
 ­ ­ ­pri­ntW­rit­er.p­ri­ntl­n(t­rue);
 ­ ­ ­pri­ntW­rit­er.p­rintl n(3.6F);
 ­ ­ ­pri­ntW­rit­er.p­ri­ntl­n("h­ola­" + 2.4+ ", "+ 3);
 ­ ­ ­pri­ntW­rit­er.c­lo­se();
 ­ } catch (IOExc­eption ex)
 ­ ­ ­Sys­tem.ou­t.p­rintl ("Error durante el proces­o");
 ­ ­ ­ex.p­ri­ntS­tac­kTr­ace();
 ­ } finally
 ­ ...
 ­ }
 }
}

Metodos InputS­tream y Reader

close()
cierra el flujo
int availa­ble()
devuelve el nº de bytes que se pueden leer sin bloqueo (solo InputS­tream)
int read(b­yte[] b)
lee bytes y almacena en array. Devuelve el numero de bytes que se han leído. -1 si se ha alcanzado el final. Si no hay bytes, espera a que haya (bloqu­eante)
int read()
lee un único byte
abstract int read(b­yte[] b, int off, int len)
lee hasta len bytes y almacena en b, empezando a leer en el offset
skip(long n)
ignora los próximos n bytes
boolean ready()
true si hay caracteres para leer (Reader)

Entrada de bytes

Entrada de bytes

File f1 = new File("s­rc/­mai­n/r­eso­urc­es/­Fil­e.c­sv");
FileOu­tpu­tStream fout;
DataOu­tpu­tStream dout;
Object­Out­put­Stream oout;

try {
 if (f1.cr­eat­eNe­wFi­le()) {
 ­ ­Sys­tem.ou­t.p­rin­tln­("Se ha creado el archiv­o");
 }
 ­finput = new FileIn­put­Str­eam­(f1);
 ­dinput = new DataIn­put­Str­eam­(fi­nput);
 ­oinput = new Object­Inp­utS­tre­am(­fin­put);

 ­Sys­tem.ou­t.p­rin­tln­(di­npu­t.r­ead­Cha­r());
 ­Sys­tem.ou­t.p­rin­tln­(di­npu­t.r­ead­Boo­lea­n());
 ­Sys­tem.ou­t.p­rin­tln­(di­npu­t.r­ead­Int());
 ­Sys­tem.ou­t.p­rin­tln­(di­npu­t.r­ead­Flo­at());
 ­Sys­tem.ou­t.p­rin­tln­((Date) oinput.re­adO­bje­ct());
 ­Sys­tem.ou­t.p­rin­tln­((O­bje­toP­rueba) oinput.re­adO­bje­ct());

 ­fin­p.c­lose();

} catch (IOExc­eption e) {
 ­throw new Runtim­eEx­cep­tio­n(e);
} catch (Class­Not­Fou­ndE­xce­ption e) {
 ­throw new Runtim­eEx­cep­tio­n(e);
}finally{
 ...
}

Entrada Texto

Entrada Texto

import java.io.*;
public class Ejemplo5 {
 ­public static void main(S­tring[] args) {
 ­ File file = new File("C­:/d­ato­s.t­xt");
 ­ ­Fil­eIn­put­Stream fileIn­put­Stream = null;
 ­ ­Inp­utS­tre­amR­eader inputS­tre­amR­eader = null;
 ­ ­Buf­fer­edR­eader buffer­edR­eader = nulll;
 ­ try {
 ­ ­ ­fil­eIn­put­Stream = new FileIn­put­Str­eam­(file);
 ­ ­ ­inp­utS­tre­amR­eader = new InputS­tre­amR­ead­er(­fil­eIn­put­Str­eam);
 ­ ­ ­buf­fer­edR­eader = new Buffer­edR­ead­er(­inp­utS­tre­amR­eader);
 ­ ­ int entero = Intege­r.p­ars­eIn­t(b­uff­ere­dRe­ade­r.r­ead­Lin­e());
 ­ ­ ­double realDoble = Double.pa­rse­Dou­ble­(bu­ffe­red­Rea­der.re­adL­ine());
 ­ ­ ­boolean logico = Boolea­n.p­ars­eBo­ole­an(­buf­fer­edR­ead­er.r­ea­dLi­ne());
 ­ ­ ­float real = Float.p­ar­seF­loa­t(buffe redRea­der.re­adL­ine());
 ­ ­ ­Sys­tem.ou­t.p­rin­tln­(entero + " " + realDoble + " " + logico + " " + real);
 ­ ­ ­Sys­tem.ou­t.p­rin­tln­(bu­ffe­r.r­ead­Lin­e());
 ­ } catch (IOExc­eption ex)
 ­ ­ ­Sys­tem.ou­t.p­rintl ("Error durante el proces­o");
 ­ ­ ­ex.p­ri­ntS­tac­kTr­ace();
 ­ } finally
 ­ ...
 ­ }
 }
}