Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

La clase File de Java - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 28 de febrero de 2021 por Amadeo M.

180 visualizaciones

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:
es
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

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid