Activa JavaScript para disfrutar de los vídeos de la Mediateca.
La clase File de Java - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Hola, vamos a comenzar a hacer una serie de programas relacionados con ficheros.
00:00:00
Iba a seguir todo esto que hay aquí, todos los apuntes que tenemos en Code&Coke,
00:00:06
pero realmente, bueno, después, antes de empezar, voy a hacer algún ejemplo previo, ¿vale?
00:00:11
Y además así vamos cogiendo un poco la idea de cómo funciona esto.
00:00:16
Me voy a mi entorno Eclipse, lo podemos hacer en IntelliJ o en Eclipse,
00:00:20
o en el entorno que más rápido nos manejemos.
00:00:24
A mí me gusta Eclipse porque es muy ligerito frente a IntelliJ, pero IntelliJ también tiene sus ventajas, sobre todo en ORM.
00:00:26
Y voy a hacer un pequeño programita en el cual vea características de una de las clases más importantes que hay relativas a ficheros, que se llama File, como no podía ser de otra manera.
00:00:34
Así que vamos a empezar. Voy a crear aquí un método estático que nos muestre, por ejemplo, las características de un fichero.
00:00:44
y si es un directorio que me muestre los ficheros que hay dentro, con esas características, algo así.
00:00:55
Vamos a ver qué nos va saliendo. Voy a darle un nombrecito, voy a llamarle myls, por ejemplo,
00:01:00
y al cual a este método le pasamos la ruta del fichero o directorio que queramos visualizar.
00:01:08
Vale, se nos pueden dar, cuando pasamos una ruta, se nos pueden dar dos situaciones, que sea un directorio o que no.
00:01:16
Así que de momento vamos a indagar sobre este fichero.
00:01:21
Voy a llamar file f, por ejemplo, y voy a abrir este fichero, esta ruta con file.
00:01:25
Bien, pues lo primero que nos va a avisar claramente es que esta librería, esta clase, no la tenemos todavía funcionando.
00:01:33
¿Vale? Si yo, a ver, si yo pinto ahí donde está el error, me dice que importe el fichero.
00:01:43
Está claro que en esta cosa tan larga no va a ser, lo que queremos es importar java.io, input, output, ¿de acuerdo? Bueno, una vez que tengo esta ruta, ya este fichero activado, pues la clase file, si vamos al API de Java, veremos un montón de características, pero yo en este caso lo primero que quiero preguntar es si f es un directorio.
00:01:51
entonces, curiosamente, simplemente habiendo
00:02:17
tecleado el punto
00:02:19
ya vemos que aquí hay un montón de cosas
00:02:22
que van a aparecer, por ejemplo
00:02:23
voy a preguntar si es un directorio
00:02:25
muy bien
00:02:27
pues si es un directorio
00:02:29
yo lo que querré
00:02:31
es que me muestre lo que hay dentro
00:02:33
de ese directorio
00:02:35
¿cómo puedo hacer eso?
00:02:36
pues tengo dos formas
00:02:39
una, que me devuelva
00:02:41
un montón de
00:02:43
files
00:02:45
que serían los archivos que están dentro
00:02:45
archivos que están dentro
00:02:48
con f.listfiles
00:02:50
ya vemos ahí además que automáticamente
00:02:54
en el momento que he decidido
00:02:56
que lo que voy a obtener es una radio ficheros
00:02:57
ya me devuelve esta opción
00:03:00
tendría otra que era pasarle
00:03:02
pasarle directamente
00:03:04
la ruta
00:03:05
y entonces me devolvería un string
00:03:07
bien, pues aquí están todos los ficheros
00:03:10
Si tengo todos estos ficheros que me devuelve, yo ahora sobre cada uno de ellos puedo hacer otra vez mi ls
00:03:13
Con lo cual recursivamente voy recorriendo todo el árbol de directorios
00:03:21
Vamos a por ello
00:03:25
Pues una manera cómoda de hacerlo es con un for en el cual yo devuelvo cada archivo de todos los archivos que me pasa
00:03:26
Esta sería una manera muy rápida y muy cómoda de manejar esto
00:03:37
¿Vale? Entonces ahora para cada archivo puedo mostrar sus características. ¿De acuerdo? Sus características. Bueno, o directamente llamar a mi ls de ese archivo, pero no de ese archivo tal cual, porque archivo pide, mi ls nos pide un string, con lo cual me hace falta convertir eso a string.
00:03:40
muy bien, con lo cual lo tendría hecho
00:04:03
¿qué ocurre si no es un directorio?
00:04:07
pues que directamente quiero ver características que tiene el fichero correspondiente
00:04:09
entonces yo puedo perfectamente, voy a ver
00:04:14
cómo lo hago, por ejemplo, así
00:04:17
bueno, aquí voy a pintar las características de ese fichero
00:04:21
voy a quitarme el println y voy a utilizar el printf para darle un poco de formato a la salida
00:04:24
voy a darle tres caracteres, ahora veremos para qué
00:04:29
voy a darle un numerito de 10 posiciones
00:04:33
perdón, de 10 posiciones
00:04:37
el nombre del ficherito
00:04:39
y el salto de línea
00:04:41
y ahora vamos a ir viendo
00:04:43
que le pongo a cada uno de esos elementos
00:04:44
lo primero que quiero ver es si este fichero
00:04:46
este programa lo puede leer
00:04:49
entonces, casi seguro que sí, ¿no?
00:04:50
pero bueno, lo puedo leer
00:04:53
can read
00:04:54
si lo puedo leer, voy a poner simplemente
00:04:55
que me muestre una, ahí perdón, una R
00:04:59
y si no, una rayita, muy al estilo Unix
00:05:02
ahora, lo mismo voy a hacer para f.can.write
00:05:06
entonces aquí pongo una w, dos puntos o una rayita
00:05:12
y si lo puedo ejecutar, f.can.execute
00:05:20
vamos a echarlo esto para atrás, lo de intentar no es ninguna manía
00:05:26
Es la única manera de que un programa sea legible. Bien, pues hasta aquí lo tenemos. En ese numerito que tenemos ahí lo que quiero contarle es la longitud, el tamaño del fichero, con lo cual pues ahí tengo el tamaño que tiene el fichero en bytes y por fin el nombre.
00:05:30
Bueno, ¿cómo cojo el nombre? Pues get, y aquí tengo el nombre, ¿de acuerdo? Simplemente el nombre del fichero. Muy bien, pues esto sería nuestro programita. ¿Qué cosas me parece que tendríamos que poner más?
00:05:51
Bueno, pues antes de que muestre todos los ficheros de un directorio, que muestre el nombre del directorio.
00:06:07
Entonces, pues por ejemplo aquí, yo puedo decirle, vamos a darle así otra vez.
00:06:13
Ay, por Dios, que ha salido esto mal.
00:06:20
Bueno, pues si eso ha salido mal, tampoco nos vamos a preocupar.
00:06:23
System, auto.
00:06:28
y entonces vamos a ponerle printf
00:06:30
para que podamos hacerlo con formato
00:06:33
vamos a ponerle aquí
00:06:37
que nos muestre por ejemplo
00:06:39
el nombre completo del directorio
00:06:41
y un salto de línea
00:06:44
entonces aquí podríamos poner directamente la ruta
00:06:45
y así ya tenemos la ruta
00:06:51
voy a poner también dos puntitos para que se vea claro
00:06:53
que este es el directorio
00:06:55
Muy bien, pues con esto ya podríamos intentar ejecutar este método
00:06:57
Vamos a ver, vamos a analizar cómo llamamos a esto
00:07:04
Y esto se lo podría aplicar a cualquier ficherito
00:07:09
Voy a quitar esta línea de aquí, el programa principal
00:07:11
Y voy a llamar a mi ls, por ejemplo, del fichero 1 que todos conocemos
00:07:15
Que es el fichero Power, estamos en Linux, ¿vale?
00:07:21
entonces vamos a ir a este
00:07:25
vamos a ver que nos ejecutaría esto
00:07:27
que situación nos daría
00:07:29
si ejecutamos esto
00:07:32
nos dice que
00:07:34
vamos a decirle que siempre nos guarde
00:07:36
todos los recursos antes de lanzarlos
00:07:37
pues si hacemos esto
00:07:39
efectivamente nos está diciendo
00:07:42
que
00:07:44
es un fichero de lectura
00:07:45
que no se puede escribir
00:07:47
el cual no se puede ejecutar y que tiene este tamaño
00:07:49
ah, pues fantástico
00:07:52
Digo, ¿pero qué ocurre, por ejemplo, si yo dijera simplemente ETC?
00:07:53
Es decir, el directorio completo. Pues vamos a verlo.
00:07:59
Bueno, vemos que es algo enorme, enorme, con montones de estructuras.
00:08:04
Directorio ETC, hemos empezado aquí arriba.
00:08:11
Ha ido fichero a fichero contándonos y ha entrado en cada uno de los subdirectorios contándonos también su información.
00:08:14
¿vale? ¿qué ocurre? que no sabemos muy bien en qué estructura estamos
00:08:20
dentro de cada subdirectorio, aparte de todo aquí hay links enlazados
00:08:24
etcétera, con lo cual posiblemente de ahí proviene el último error que aparece
00:08:28
al final, vamos a ir hasta el final, son muchas líneas y efectivamente
00:08:32
en algún sitio pues no ha podido con eso porque algo ha ido
00:08:36
a un enlace que no ha podido solucionar ¿vale? con lo cual vamos a ir a un entorno un poquito
00:08:40
más controlado, donde veamos mejor nuestras cosas, por ejemplo el propio directorio
00:08:44
donde estoy trabajando. ¿Y dónde estoy trabajando? Pues
00:08:48
el directorio en que yo estoy trabajando es justamente
00:08:51
obtener la propiedad System.getProperty
00:08:54
de User.dir. El trabajo
00:09:02
nuestro, el usuario nuestro. ¿Vale?
00:09:06
Vamos a ejecutar esto para ver un poco con más precisión
00:09:10
qué es lo que está ocurriendo. Muy bien, estamos en nuestro proyecto
00:09:15
dentro de un fichero que es classpath
00:09:18
dentro de un directorio bin que ha creado una clase
00:09:21
también está project, pero tal como está no sabemos si pertenece
00:09:24
a este directorio o al otro
00:09:28
y así vamos recorriendo todos los ficheritos
00:09:30
y sus características. Claro, el no saber
00:09:33
a quién pertenece realmente, pues este programa nos lo hace muy eficiente
00:09:36
en cambio si cada vez que llamamos
00:09:39
cada vez que llamamos a mi ls, le decimos en qué nivel
00:09:42
nos encontramos, mejoraremos bastante
00:09:45
Podríamos decirle en qué nivel nos encontramos.
00:09:47
Cuando arrancamos por primera vez, estaríamos en el nivel 0.
00:09:52
Hasta ahí, bien.
00:09:57
Y cada vez que pasamos de nivel, incrementamos en 1 el nivel que le pasamos.
00:09:59
Hasta ahí estaría todo correcto, excepto que no hemos hecho nada para la visualización.
00:10:04
Vamos a meterle tabuladores o indentación.
00:10:10
Vamos a meterle un string que llamemos indentación.
00:10:13
que va a ser, por ejemplo, el carácter tabulador, pues tantas veces como diga nivel.
00:10:17
¿De acuerdo? Tan simple como eso.
00:10:29
Entonces, cuando metamos la ruta, vamos a meterle por delante esa indentación.
00:10:31
Voy a ponerlo ya como el otro para verlo igual.
00:10:37
Y cuando muestro los ficheritos, voy a hacer exactamente lo mismo.
00:10:42
Voy a ponerle esto por delante y lo primero que hago es indentar.
00:10:45
Bueno, con este pequeño cambio vamos a ver cómo hemos solucionado esto. Si vemos el resultado, pues ahora ya sí, vemos claramente que Project pertenece a MyFirstProject, mientras que los demás ficheros cada uno pertenecen a su subdirectorio, con lo cual ahora sí es mucho más clara la información de salida.
00:10:49
bueno, ¿qué más cuestiones podríamos ver?
00:11:10
pues es muy feo, muy fea esta llamada que tenemos aquí debajo
00:11:13
esto llamará a cero, ese cero, ¿qué significa para el programa?
00:11:17
entonces yo lo que quiero llamarle así directamente a mi programa
00:11:21
y que arranque en cero
00:11:24
con lo cual puedo, utilizando las características
00:11:25
de la programación orientada a objetos
00:11:28
definir otra cabecera, static
00:11:30
igual que la anterior, voy
00:11:34
myls string, simplemente la ruta
00:11:36
y que ésta, cuando se le llame, llame a mi LS ruta con cero.
00:11:40
Con lo cual funcionaría tanto este caso como si viéramos un nivel.
00:11:49
Vamos a ver si es verdad y aquí tenemos que efectivamente ha funcionado correctamente
00:11:54
y tenemos dos llamadas, una incluyendo un nivel de acceso y otro que no.
00:12:04
realmente si estuviéramos en una aplicación, en una clase que quisiéramos crear cosas
00:12:10
este sería el public y este sería algo interno donde hubiéramos programado todo lo anterior
00:12:14
bueno, pues como primer ejemplo de ver las características
00:12:19
o alguna de las características que nos permite File
00:12:24
creo que ya es suficiente
00:12:27
- Idioma/s:
- Autor/es:
- Amadeo Mora
- Subido por:
- Amadeo M.
- Licencia:
- Dominio público
- Visualizaciones:
- 180
- Fecha:
- 28 de febrero de 2021 - 12:12
- Visibilidad:
- Público
- Centro:
- IES CLARA DEL REY
- Duración:
- 12′ 31″
- Relación de aspecto:
- 16:9 Es el estándar usado por la televisión de alta definición y en varias pantallas, es ancho y normalmente se le suele llamar panorámico o widescreen, aunque todas las relaciones (a excepción de la 1:1) son widescreen. El ángulo de la diagonal es de 29,36°.
- Resolución:
- 908x512 píxeles
- Tamaño:
- 28.70 MBytes