ejercicio básico inicial 4 programa java que declare cuatro … · 2018-05-15 · ejercicio...

53
Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale un valor a cada una. A continuación realiza las instrucciones necesarias para que: B tome el valor de C C tome el valor de A A tome el valor de D D tome el valor de B Si por ejemplo A = 1, B = 2, C = 3 y D = 4 el programa debe mostrar: Valores iniciales A = 1 B = 2 C = 3 D = 4 Valores finales B toma el valor de C -> B = 3 C toma el valor de A -> C = 1 A toma el valor de D -> A = 4 D toma el valor de B -> D = 2

Upload: others

Post on 04-Apr-2020

75 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

un valor a cada una. A continuación realiza las instrucciones necesarias para que: B tome el valor

de C C tome el valor de A A tome el valor de D D tome el valor de B Si por ejemplo A = 1, B = 2, C =

3 y D = 4 el programa debe mostrar: Valores iniciales A = 1 B = 2 C = 3 D = 4 Valores finales B toma

el valor de C -> B = 3 C toma el valor de A -> C = 1 A toma el valor de D -> A = 4 D toma el valor de B

-> D = 2

Page 2: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Ejercicio básico inicial 3

Escribe un programa Java que declare una variable entera N y asígnale un valor. A

continuación escribe las instrucciones que realicen los siguientes:

Incrementar N en 77.

Decrementarla en 3.

Duplicar su valor.

Si por ejemplo N = 1 la salida del programa será:

Valor inicial de N = 1

N + 77 = 78

N - 3 = 75

N * 2 = 150

Page 3: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Ejercicio básico inicial 4

Programa java que declare cuatro variables enteras A, B, C y D y asígnale un valor a

cada una. A continuación realiza las instrucciones necesarias para que:

B tome el valor de C

C tome el valor de A A tome el valor de D

D tome el valor de B

Si por ejemplo A = 1, B = 2, C = 3 y D = 4 el programa debe mostrar:

Valores iniciales A = 1

B = 2

C = 3

D = 4 Valores finales

B toma el valor de C -> B = 3

C toma el valor de A -> C = 1

A toma el valor de D -> A = 4

D toma el valor de B -> D = 2

Page 4: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

LEER DATOS POR TECLADO

La clase Scanner está disponible a partir de Java 5 y facilita la lectura de datos en los

programas Java.

Primero veremos varios ejemplos de lectura de datos en Java con Scanner y

después explicaremos en detalle como funciona.

Para utilizar Scanner en el programa tendremos que hacer lo siguiente:

1. Escribir el import

La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir al inicio del programa la instrucción:

import java.util.Scanner;

2. Crear un objeto Scanner

Page 5: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de entrada.

Si el dispositivo de entrada es el teclado escribiremos:

Scanner sc = new Scanner(System.in);

Se ha creado el objeto sc asociado al teclado representado por System.in

Una vez hecho esto podemos leer datos por teclado.

Ejemplos de lectura:

Para leer podemos usar el método nextXxx() donde Xxx indica en tipo, por ejemplo

nextInt() para leer un entero, nextDouble() para leer un double, etc.

Ejemplo de lectura por teclado de un número entero:

int n;

System.out.print("Introduzca un número entero: ");

n = sc.nextInt();

Ejemplo de lectura de un número de tipo double:

double x;

System.out.print("Introduzca número de tipo double: ");

x = sc.nextDouble();

Ejemplo de lectura de una cadena de caracteres:

String s;

System.out.print("Introduzca texto: "); s = sc.nextLine();

Ejemplo de programa Java con lectura de datos con Scanner:

El programa pide que se introduzca el nombre de la persona y lo muestra por pantalla. A continuación lee por teclado el radio de una circunferencia de tipo double y muestra

su longitud. Además lee un entero y muestra su cuadrado.

import java.util.Scanner; public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in); //crear un objeto Scanner

String nombre;

double radio; int n;

System.out.print("Introduzca su nombre: ");

nombre = sc.nextLine(); //leer un String

System.out.println("Hola " + nombre + "!!!"); System.out.print("Introduzca el radio de la circunferencia: ");

radio = sc.nextDouble(); //leer un double

System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);

System.out.print("Introduzca un número entero: "); n = sc.nextInt(); //leer un entero

System.out.println("El cuadrado es: " + Math.pow(n,2));

}

}

Page 6: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 7: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 8: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 9: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 10: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

CLASE 13 DE SEPTIEMBRE

Page 11: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 12: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 13: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

CLASE 25 DE SEPTIEMBRE

Page 14: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 15: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 16: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 17: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 18: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

CLASE 4 OCT

La primera consiste en comprobar si el carácter es un dígito mediante el método isDigit

de la clase Character. Este método devuelve true si el carácter que se le pasa como

parámetro es una cifra entre 0 y 9:

/* * Ejemplo de programa con estructura condicional

* Programa que lea un carácter por teclado y compruebe si es un número

*/

Page 19: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 20: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

http://puntocomnoesunlenguaje.blogspot.mx/2012/10/java-ejercicios-basicos-resueltos.html

Page 21: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

1. Ejemplo de uso de while: Programa Java que muestre los números del 1 al

100 utilizando la instrucción while. /* * Ejercicios básicos java con estructura iterativa o repetitiva * Mostrar los números del 1 al 100

* utilizando un bucle while */ public class Main { public static void main(String[] args) { System.out.println("Numeros del 1 al 100: "); int i=1; while(i<=100) { System.out.println(i); i++; } } } 2. Ejemplo de uso de do-while. Programa Java que muestre los números del 1

al 100 utilizando la instrucción do..while. /* * Ejercicios básicos java con estructura iterativa o repetitiva * Mostrar los números del 1 al 100 utilizando un bucle do while */ public class Main { public static void main(String[] args) { int i = 1; System.out.println("Numeros del 1 al 100: "); do{ System.out.println(i); i++; }while(i<=100); } }

Page 22: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

3. Ejemplo de uso de for. Programa Java que muestre los números del 1 al

100 utilizando la instrucción for. /* * Ejercicios básicos java con estructura iterativa o repetitiva * Mostrar los números del 1 al 100 utilizando un bucle for */ public class Repetitiva1_3 { public static void main(String[] args) { System.out.println("Numeros del 1 al 100: "); for(int i = 1; i<=100;i++) System.out.println(i); } } 4. Ejemplo de uso de while. Programa Java que muestre los números del 100

al 1 utilizando la instrucción while. /* * Ejercicios básicos java con estructura iterativa o repetitiva * Mostrar los números del 100 al 1 utilizando un bucle while */ public class Main { public static void main(String[] args) { System.out.println("Numeros del 100 al 1: "); int i=100; while(i>=1) { System.out.println(i); i--; } } }

Page 23: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

5. Ejemplo de uso de do-while. Programa Java que muestre los números del

100 al 1 utilizando la instrucción do..while. /* * Ejercicios básicos java con estructura iterativa o repetitiva * Mostrar los números del 100 al 1 utilizando un bucle do while */ public class Main { public static void main(String[] args) { int i = 100; System.out.println("Numeros del 100 al 1: "); do{ System.out.println(i); i--; }while(i>=1); } }

6. Ejemplo de for. Programa Java que muestre los números del 100 al 1

utilizando la instrucción for. /* * Ejercicios básicos java con estructura iterativa o repetitiva * Mostrar los números del 100 al 1 utilizando un bucle for */ public class Repetitiva1_6 { public static void main(String[] args) { System.out.println("Numeros del 100 al 1: "); for(int i=100;i>=1;i--) System.out.println(i); } }

Programa Java que pide un número entero por teclado y calcula y muestra el número de

cifras que tiene.

Por ejemplo si se introduce el número 54391 el programa mostrará el mensaje:

El número tiene 5 cifras

Si se introduce el número 101 se mostrará el mensaje:

El número tiene 3 cifras

El proceso leer un número y contar sus cifras se repetirá hasta que se conteste ‘N’ a la

pregunta Continuar? (S/N)

Si se responde 'S' se volverá a pedir otro número.

Para saber cuántas cifras tiene un número entero haremos lo siguiente:

Page 24: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Dividiremos el número sucesivamente entre 10. En cada división tomaremos la parte

entera y volvemos a dividir. Este proceso se repite hasta que se obtenga un cero como

cociente en la división.

Por ejemplo, si el número leído es 1234 haremos las siguientes operaciones:

1234 / 10 = 123

123 / 10 = 12 12 / 10 = 1

1 / 10 = 0

hemos realizado 4 divisiones hasta obtener un cero como cociente, por lo tanto el número tiene 4 cifras.

// Programa Java que calcula el número de cifras que tiene un número entero

import java.util.*;

import java.io.*;

public class Main {

public static void main(String[] args) throws IOException{

Scanner sc = new Scanner(System.in);

int n, cifras; char car;

do{

System.out.print("Introduce un número entero: ");

n = sc.nextInt(); cifras= 0; //esta variable es el contador de cifras

while(n!=0){ //mientras a n le queden cifras

n = n/10; //le quitamos el último dígito

cifras++; //sumamos 1 al contador de cifras }

System.out.println("El número tiene " + cifras+ " cifras");

System.out.print("Continuar? ");

car = (char)System.in.read();

}while(car!='n' && car != 'N'); }

}

Programa que lea una serie de números por teclado hasta que se lea un número

negativo. El programa indicará cuántos números acabados en 2 se han leído.

Para saber si un número acaba en dos o en general para saber en qué dígito termina un número entero se divide el número entre 10 y se obtiene el resto de esta división.

En Java el operador que obtiene el resto de una división es el operador %

En este caso para saber si el número acaba en 2 escribiremos la instrucción:

if(n%10==2)

import java.util.*;

/**

* Programa que lea una serie de números por teclado hasta que

* se lea un número negativo. El programa indicará cuántos números * acabados en 2 se han leído.

Page 25: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

* @author Enrique

*/

public class AcabadosEn2 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in); int n, contador=0;

System.out.print("Introduce un número entero: ");

n = sc.nextInt();

while(n>=0){ if(n%10==2) //Si el número acaba en dos

contador++; //esta variable contendrá cuántos números acabados en

2 se han leído.

System.out.print("Introduce un número entero: "); n = sc.nextInt();

}

System.out.println("Se han introducido " + contador + " números acabados en

2");

} }

Programa de decimal a binario

Page 26: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 27: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 28: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

CLASE 6 DE NOVIEMBRE CONVERTIR UN NÚMERO DE BINARIO A DECIMAL EN JAVA

El programa para pasar un número expresado en binario a decimal se basa en la forma

tradicional de hacerlo. Los dígitos del número binario ocupan una posición que se

numera de derecha a izquierda empezando por cero. La posición del dígito más a la

derecha es la 0.

Numero Binario: 1 1 0 1 0 1

Posición que ocupa cada dígito 5 4 3 2 1 0

Para pasar el número a decimal se multiplica cada dígito binario por 2 elevado a la

posición que ocupa. La suma de todos los productos es el equivalente en decimal.

Page 29: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

package binariodecimal;

import java.util.Scanner;

public class Binariodecimal {

public static void main(String[] args) {

long numero, aux, digito, decimal;

int exponente;

boolean esBinario;

Scanner sc = new Scanner(System.in);

//Leer un número por teclado y comprobar que es binario

do {

System.out.print("Introduce un numero binario: ");

numero = sc.nextLong();

//comprobamos que sea un número binario es decir

//que este formado solo por ceros y unos

esBinario = true;

aux = numero;

while (aux != 0) {

digito = aux % 10; //última cifra del números

Page 30: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

if (digito != 0 && digito != 1) { //si no es 0 ó 1

esBinario = false; //no es un número binario

}

aux = aux / 10; //quitamos la última cifra para repetir el proceso

}

} while (!esBinario); //se vuelve a pedir si no es binario

//proceso para pasar de binario a decimal

exponente = 0;

decimal = 0; //será el equivalente en base decimal

while (numero != 0) {

//se toma la última cifra

digito = numero % 10;

//se multiplica por la potencia de 2 correspondiente y se suma al número

decimal = decimal + digito * (int) Math.pow(2, exponente);

//se aumenta el exponente

exponente++;

//se quita la última cifra para repetir el proceso

numero = numero / 10;

}

System.out.println("Decimal: " + decimal); // TODO code application logic here

}

}

Page 31: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

CUENTA CUANTOS NUMEROS TERMINAN CON 2

Programa que lea una serie de números por teclado hasta que se lea un número

negativo. El programa indicará cuántos números acabados en 2 se han leído.

Para saber si un número acaba en dos o en general para saber en qué dígito termina

un número entero se divide el número entre 10 y se obtiene el resto de esta división.

En Java el operador que obtiene el resto de una división es el operador %

En este caso para saber si el número acaba en 2 escribiremos la instrucción:

if(n%10==2)

package numerosromanos;

import java.util.Scanner;

/**

*

* @author PC

*/

public class NUMEROSROMANOS {

Page 32: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int N;

do {

System.out.print("Introduce un número entre 1 y 3999: ");

N = sc.nextInt();

} while (N < 1 || N > 3999);

System.out.println(N + " en numeros romanos -> " + convertirANumerosRomanos(N));

}

//método para pasar a números romanos

public static String convertirANumerosRomanos(int numero) {

int i, miles, centenas, decenas, unidades;

String romano = "";

//obtenemos cada cifra del número

miles = numero / 1000;

centenas = numero / 100 % 10;

decenas = numero / 10 % 10;

unidades = numero % 10;

//millar

for (i = 1; i <= miles; i++) {

romano = romano + "M";

}

//centenas

if (centenas == 9) {

romano = romano + "CM";

Page 33: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

} else if (centenas >= 5) {

romano = romano + "D";

for (i = 6; i <= centenas; i++) {

romano = romano + "C";

}

} else if (centenas == 4) {

romano = romano + "CD";

} else {

for (i = 1; i <= centenas; i++) {

romano = romano + "C";

}

}

//decenas

if (decenas == 9) {

romano = romano + "XC";

} else if (decenas >= 5) {

romano = romano + "L";

for (i = 6; i <= decenas; i++) {

romano = romano + "X";

}

} else if (decenas == 4) {

romano = romano + "XL";

} else {

for (i = 1; i <= decenas; i++) {

romano = romano + "X";

}

}

Page 34: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

//unidades

if (unidades == 9) {

romano = romano + "IX";

} else if (unidades >= 5) {

romano = romano + "V";

for (i = 6; i <= unidades; i++) {

romano = romano + "I";

}

} else if (unidades == 4) {

romano = romano + "IV";

} else {

for (i = 1; i <= unidades; i++) {

romano = romano + "I";

}

}

return romano;

}

}

CLASE 13 DE noviembre

Ficheros de texto en Java Un fichero de texto está formado por secuencias de caracteres, organizados en líneas de

igual o distinta longitud.

Todos los datos que aparecen en estos ficheros están formados por caracteres.

CREAR Y ESCRIBIR EN FICHEROS DE TEXTO EN JAVA

Para escribir en un fichero de texto utilizaremos dos clases:

FileWriter y PrintWriter.

La clase FileWriter permite tener acceso al fichero en modo escritura.

Para crear objetos FileWriter podemos utilizar los constructores:

Page 35: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

FileWriter(String path)

FileWriter(File objetoFile);

El fichero se crea y si ya existe su contenido se pierde.

Si lo que necesitamos es abrir un fichero de texto existente sin perder su contenido y

añadir más contenido al final utilizaremos los constructores:

FileWriter(String path, boolean append)

FileWriter(File objetoFile, boolean append)

Si el parámetro append es true significa que los datos se van a añadir a los existentes.

Si es false los datos existentes se pierden.

La clase FileWriter proporciona el método write() para escribir cadenas de caracteres

aunque lo normal es utilizar esta clase junto con la clase PrintWriter para facilitar la

escritura.

La clase PrintWriter permite escribir caracteres en el fichero de la misma forma que

en la pantalla.

Un objeto PrintWriter se crea a partir de un objeto FileWriter.

Ejemplo:

FileWriter fw = new FileWriter("c:/ficheros/datos.txt");

PrintWriter salida = new PrintWriter(fw);

En este ejemplo se ha creado un fichero de texto llamado datos.txt. El fichero se

encuentra dentro de la carpeta ficheros en la unidad C:

A partir de Java 5 se puede crear un objeto PrintWriter directamente a partir de un

objeto File o de la ruta:

PrintWriter salida = new PrintWriter("c:/ficheros/datos.txt");

En este caso, si el fichero no existe se crea. Si no se puede crear un archivo con ese

nombre o si ocurre algún error se lanza una excepciónFileNotFoundException.

Una vez creado el objeto podemos utilizar print(), println() y printf() para escribir en

el fichero como si fuese en pantalla.

Ejemplo de escritura de un fichero de texto:

Programa Java que lee texto por teclado y lo escribe en un fichero de texto llamado

datos.txt. El proceso consiste en leer una línea de texto por teclado y escribirla en el

Page 36: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

fichero. Este proceso se repite hasta que se introduce por teclado la cadena FIN. La

cadena FIN que indica el final de lectura no se debe escribir en el fichero.

import java.io.FileNotFoundException;

import java.io.PrintWriter;

import java.util.Scanner;

public class File11 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

PrintWriter salida = null;

try {

salida = new PrintWriter("c:/ficheros/datos.txt"); //se crea el fichero

String cadena;

System.out.println("Introduce texto. Para acabar introduce la cadena FIN:");

cadena = sc.nextLine(); //se introduce por teclado una cadena de texto

while (!cadena.equalsIgnoreCase("FIN")) {

salida.println(cadena); //se escribe la cadena en el fichero

cadena = sc.nextLine(); //se introduce por teclado una cadena de texto

}

salida.flush();

} catch (FileNotFoundException e) {

System.out.println(e.getMessage());

} finally {

salida.close();

}

}

}

El método flush() provoca que se escriban en el fichero los datos que puedan haber en

el buffer de salida.

El método close() cierra la conexión con el fichero y libera los recursos que está usando

la conexión.

A partir de Java 7 se puede usar la instrucción try-with-resources. Un resource (recurso)

es un objeto que necesita ser cerrado después de usarlo. Una instrucción try-with-

Page 37: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

resources asegura que estos objetos serán cerrados al final de la instrucción try.

Cualquier objeto que implemente la interface java.lang.AutoCloseable, entre ellos los

que implementan la interface java.io.Closeable pueden ser usados como resources.

El ejemplo anterior se escribiría así:

import java.io.FileNotFoundException;

import java.io.PrintWriter;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String cadena;

try (PrintWriter salida = new PrintWriter("c:/ficheros/datos.txt")) {

System.out.println("Introduce texto. Para acabar introduce la cadena FIN:");

cadena = sc.nextLine();

while (!cadena.equalsIgnoreCase("FIN")) {

salida.println(cadena);

cadena = sc.nextLine();

}

} catch (FileNotFoundException e) {

System.out.println(e.getMessage());

}

}

}

A continuación del try se escribe el recurso entre paréntesis. Ahora no es necesario

escribir el bloque finally para cerrar el fichero.

La instrucción try puede contener varios recursos, en este caso irán separados por punto

y coma.

Ejemplo: Programa que leer por teclado líneas de texto y las añade al final del ficheros

datos.txt. Para resolverlo vamos a modificar el programa anterior para que añada texto

al fichero datos.txt, es decir, al volver a ejecutar el programa el contenido anterior del

fichero no se pierde y el contenido nuevo se añade al final.

import java.io.FileWriter;

import java.io.IOException;

Page 38: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

import java.io.PrintWriter;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String cadena;

try (FileWriter fw = new FileWriter("c:/ficheros/datos.txt", true);

PrintWriter salida = new PrintWriter(fw)) {

System.out.println("Introduce texto. Para acabar introduce la cadena FIN:");

cadena = sc.nextLine();

while (!cadena.equalsIgnoreCase("FIN")) {

salida.println(cadena);

cadena = sc.nextLine();

}

} catch (IOException ex) {

System.out.println(ex.getMessage());

}

}

}

PROGRAMAS

Page 39: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

LEE EL CONTENIDO DEL ARCHIVO Y LO MUESTRA EN PANTALLA

Page 40: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Ejemplo:

Mostrar por pantalla el contenido del fichero de texto datos.txt pero en este caso lo

vamos a leer carácter a carcater. El proceso consiste en leer un carácter del fichero y mostrarlo por pantalla. Este proceso se repite hasta que no queden más caracteres que

leer en el fichero, es decir, hasta que se alcance el finall del fichero. En este caso el

método read() devuelve -1.

Page 41: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale
Page 42: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

27 DE NOVIEMBRE FICHEROS BINARIOS

Un fichero binario o de datos está formado por secuencias de bytes. Estos archivos pueden contener datos de tipo básico (int, float, char, etc) y objetos.

Para poder leer el contenido de un fichero binario debemos conocer la estructura

interna del fichero, es decir, debemos saber cómo se han escrito: si hay enteros,

long, etc. y en qué orden están escritos en el fichero. Si no se conoce su estructura podemos leerlo byte a byte

ESCRIBIR DATOS EN FICHEROS BINARIOS Para escribir datos en un fichero binario utilizaremos las clases Java FileOutputStream y

DataOutputStream derivadas de OutputStream.

FileOutputStream

La clase FileOutputStream permite tener acceso al fichero para escribir bytes.

Para crear objetos FileOutputStream podemos utilizar los constructores:

FileOutputStream (String ruta)

FileOutputStream (File objetoFile);

FileOutputStream (String ruta, boolean append) FileOutputStream (File objetoFile, boolean append)

Page 43: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Si el parámetro append es true significa que los datos se van a añadir a los existentes.

Si es false los datos existentes se pierden. Si se utiliza uno de los dos primeros

constructores los datos existentes se pierden.

Los constructores lanzan una excepción FileNotFoundException si no existe y no se

ha podido crear el fichero. La clase FileOutputStream proporciona el método write() para escribir bytes en el

fichero. Este método lanza una IOException.

DataOutputStream

A partir de un objeto FileOutputStream se puede crear un objeto DataOutputStream, que proporciona métodos para escribir datos de tipo primitivo en el fichero.

Para crear un objeto DataOutputStream se utiliza el constructor:

DataOutputStream(OutputStream nombre);

La clase proporciona métodos writeXxx() donde Xxx es el nombre del tipo primitivo. Lanzan una IOException

EJEMPLOS JAVA DE ESCRITURA EN FICHEROS BINARIOS Ejemplo 1:

Programa que lee enteros por teclado y los escribe en el fichero datos.dat. La lectura de

datos acaba cuando se introduce -1.

import java.io.DataOutputStream; import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Scanner;

public class Binarios1 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

FileOutputStream fos = null;

DataOutputStream salida = null;

int n;

try {

fos = new FileOutputStream("/ficheros/datos.dat");

salida = new DataOutputStream(fos);

System.out.print("Introduce número entero. -1 para acabar: ");

n = sc.nextInt();

while (n != -1) { salida.writeInt(n); //se escribe el número entero en el fichero

System.out.print("Introduce número entero. -1 para acabar: ");

n = sc.nextInt();

} } catch (FileNotFoundException e) {

System.out.println(e.getMessage());

} catch (IOException e) {

System.out.println(e.getMessage());

} finally { try {

Page 44: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

if (fos != null) {

fos.close();

}

if (salida != null) {

salida.close(); }

} catch (IOException e) {

System.out.println(e.getMessage());

} }

}

}

Ejemplo 2:

Programa Java que crea una matriz de elementos de tipo double y lee por teclado el

valor de sus elementos. A continuación escribe el contenido de la matriz en un fichero.

Al principio del fichero se escriben dos enteros con los valores del número de filas y

columnas de la matriz.

import java.io.DataOutputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream; import java.io.IOException;

import java.util.Scanner;

public class Binarios2 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

FileOutputStream fos = null;

DataOutputStream salida = null;

double[][] matriz; int filas, columnas, i, j;

do{

System.out.print("Número de filas: ");

filas = sc.nextInt(); }while(filas<=0);

do{

System.out.print("Número de columnas: ");

columnas = sc.nextInt(); }while(columnas<=0);

matriz = new double[filas][columnas]; //se crea la matriz

for (i = 0; i < filas; i++) { //lectura de datos por teclado for (j = 0; j < columnas; j++) {

System.out.print("matriz[" + i + "][" + j + "]: ");

matriz[i][j] = sc.nextDouble();

} }

try {

Page 45: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

//crear el fichero de salida

fos = new FileOutputStream("/ficheros/matriz.dat");

salida = new DataOutputStream(fos);

//escribir el número de filas y columnas en el fichero salida.writeInt(filas);

salida.writeInt(columnas);

//escribir la matriz en el fichero for (i = 0; i < filas; i++) {

for (j = 0; j < columnas; j++) {

salida.writeDouble(matriz[i][j]);

} }

} catch (FileNotFoundException e) {

System.out.println(e.getMessage());

} catch (IOException e) {

System.out.println(e.getMessage()); } finally {

try {

if (fos != null) {

fos.close(); }

if (salida != null) {

salida.close();

} } catch (IOException e) {

System.out.println(e.getMessage());

}

} }

}

LECTURA DE FICHEROS BINARIOS

Para leer de un fichero binario utilizaremos las clases Java FileInputStream y

DataInputStream derivadas de InputStream. FileInputStream

La clase FileInputStream permite leer bytes de un fichero.

Para crear objetos FileInputStream podemos utilizar los constructores:

FileInputStream (String ruta)

FileInputStream (File objetoFile);

Ambos lanzan una excepción FileNotFoundException si el fichero no existe.

La clase proporciona el método read() para leer bytes del fichero. El método read lanza una excepción IOException.

DataInputStream

A partir de un objeto FileInputStream podemos crear un objeto DataInputStream

para leer datos de tipo primitivo.

Para crear un objeto DataInputStream se utiliza el constructor:

DataInputStream (InputStream nombre);

Page 46: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

La clase proporciona métodos readXxx() donde Xxx es el nombre del tipo primitivo.

Lanzan una excepción IOException.

Cuando un método readXxx() alcanza el final del fichero lanza una excepción

EOFException.

EJEMPLOS JAVA DE LECTURA DE FICHEROS BINARIOS

Ejemplo 3:

Programa que lee el contenido del fichero creado en el Ejemplo 1. Utilizaremos un bucle infinito para leer los datos. Cuando se llega al final del fichero se lanza la excepción

EOFException que se utiliza para salir del bucle while.

import java.io.DataInputStream;

import java.io.EOFException; import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Binarios3 { public static void main(String[] args) {

FileInputStream fis = null;

DataInputStream entrada = null;

int n;

try { fis = new FileInputStream("/ficheros/datos.dat");

entrada = new DataInputStream(fis);

while (true) {

n = entrada.readInt(); //se lee un entero del fichero System.out.println(n); //se muestra en pantalla

}

} catch (FileNotFoundException e) {

System.out.println(e.getMessage()); } catch (EOFException e) {

System.out.println("Fin de fichero");

} catch (IOException e) {

System.out.println(e.getMessage());

} finally { try {

if (fis != null) {

fis.close();

} if (entrada != null) {

entrada.close();

}

} catch (IOException e) { System.out.println(e.getMessage());

}

}

} }

Ejemplo 4:

Programa Java que lee el contenido del fichero creado en el Ejemplo 2 y lo muestra por

pantalla.

Page 47: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

import java.io.DataInputStream;

import java.io.EOFException;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Binarios4 {

public static void main(String[] args) {

FileInputStream fis = null; DataInputStream entrada = null;

int filas, columnas, i, j;

try {

fis = new FileInputStream("/ficheros/matriz.dat"); entrada = new DataInputStream(fis);

filas = entrada.readInt(); //se lee el primer entero del fichero

columnas = entrada.readInt();//se lee el segundo entero del fichero

for (i = 0; i < filas; i++) {

for (j = 0; j < columnas; j++) { // se leen los double y se muestran por pantalla

System.out.printf("%8.2f", entrada.readDouble());

}

System.out.println(); }

} catch (FileNotFoundException e) {

System.out.println(e.getMessage());

} catch (EOFException e) { System.out.println("Fin de fichero");

} catch (IOException e) {

System.out.println(e.getMessage());

} finally { try {

if (fis != null) {

fis.close();

}

if (entrada != null) { entrada.close();

}

} catch (IOException e) {

System.out.println(e.getMessage()); }

}

}

}

Ficheros de Acceso Aleatorio en Java. Clase

RandomAccessFile

La clase Java RandomAccessFile se utiliza para acceder a un fichero de forma aleatoria.

Los constructores de la clase son:

RandomAccessFile(String path, String modo);

Page 48: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

RandomAccessFile(File objetoFile, String modo);

Lanzan una excepción FileNotFoundException.

El argumento modo indica el modo de acceso en el que se abre el fichero.

Los valores permitidos para este parámetro son:

modo Significado

"r"

Abre el fichero en modo solo lectura. El fichero debe existir. Una operación de escritura en este fichero

lanzará una excepción IOException.

"rw" Abre el fichero en modo lectura y escritura.

Si el fichero no existe se crea.

Ejemplo: abrir un fichero aleatorio para lectura Se abre el fichero clientes.dat para lectura usando el primer constructor.

RandomAccessFile fichero = new RandomAccessFile("/ficheros/clientes.dat", "r");

Ejemplo : abrir un fichero aleatorio para lectura/escritura Se abre el fichero personas.dat para lectura/escritura usando el segundo constructor. Si

el fichero no existe se crea.

File f = new File ("/ficheros/personas.dat");

RandomAccessFile fichero = new RandomAccessFile(f, "rw");

ACCESO A LOS DATOS EN FICHEROS ALEATORIOS

Para acceder de forma aleatoria a los datos contenidos en el fichero, la clase

RandomAccessFile dispone de varios métodos. Entre ellos:

long getFilePointer();

Devuelve la posición actual del puntero del fichero. Indica la posición (en bytes) donde

se va a leer o escribir.

long length();

Devuelve la longitud del fichero en bytes.

void seek(long pos); Coloca el puntero del fichero en una posición pos determinada. La posición se da como

un desplazamiento en bytes desde el comienzo del fichero. La posición 0 indica el

principio del fichero. La posición length() indica el final del fichero.

Además dispone de métodos de lectura/escritura:

public int read()

Devuelve el byte leído en la posición marcada por el puntero. Devuelve -1 si alcanza el

final del fichero. Se debe utilizar este método para leer los caracteres de un fichero de texto.

public final String readLine()

Devuelve la cadena de caracteres que se lee, desde la posición marcada por el puntero, hasta el siguiente salto de línea que se encuentre.

Page 49: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

public xxx readXxx()

Hay un método read para cada tipo de dato

básico: readChar, readInt, readDouble, readBoolean, etc.

public void write(int b)

Escribe en el fichero el byte indicado por parámetro. Se debe utilizar este método para

escribir caracteres en un fichero de texto.

public final void writeBytes(String s)

Escribe en el fichero la cadena de caracteres indicada por parámetro.

public final void writeXxx(argumento) También existe un método write para cada tipo de dato

básico: writeChar, writeInt, writeDouble, writeBoolean, etc.

Ejemplos de operaciones con ficheros de acceso aleatorio

Ejemplo 1: Programa Java que pide un número entero por teclado y lo añade al final

de un fichero binario enteros.dat que contiene números enteros. El programa utiliza un método mostrarFichero() que se llama dos veces. La primera muestra el contenido del

fichero antes de añadir el nuevo número y la segunda llamada muestra el fichero

después de añadirlo.

package random1;

import java.io.EOFException;

import java.io.FileNotFoundException; import java.io.IOException;

import java.io.RandomAccessFile;

import java.util.Scanner;

public class Random1 {

static Scanner sc = new Scanner(System.in);

static RandomAccessFile fichero = null;

public static void main(String[] args) {

int numero;

try {

//se abre el fichero para lectura y escritura fichero = new RandomAccessFile("/ficheros/enteros.dat", "rw");

mostrarFichero(); //muestra el contenido original del fichero

System.out.print("Introduce un número entero para añadir al final del fichero:

"); numero = sc.nextInt(); //se lee el entero a añadir en el fichero

fichero.seek(fichero.length()); //nos situamos al final del fichero

fichero.writeInt(numero); //se escribe el entero

mostrarFichero();//muestra el contenido del fichero después de añadir el

número

} catch (FileNotFoundException ex) {

System.out.println(ex.getMessage());

} catch (IOException ex) { System.out.println(ex.getMessage());

} finally {

Page 50: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

try {

if (fichero != null) {

fichero.close();

}

} catch (IOException e) { System.out.println(e.getMessage());

}

}

}

public static void mostrarFichero() {

int n;

try { fichero.seek(0); //nos situamos al principio

while (true) {

n = fichero.readInt(); //se lee un entero del fichero

System.out.println(n); //se muestra en pantalla

} } catch (EOFException e) {

System.out.println("Fin de fichero");

} catch (IOException ex) {

System.out.println(ex.getMessage()); }

}

}

Ejemplo 2: Programa Java para modificar un entero dentro del fichero enteros.dat con

acceso aleatorio.

Para ello se pide la posición que ocupa el entero a modificar dentro del fichero, a

continuación se lee y muestra el valor actual, se pide el nuevo valor y finalmente se escribe el nuevo valor en la posición indicada, modificando de esta forma el valor antiguo

por el nuevo.

La posición deberá estar comprendida entre 1 y el número de enteros que contiene el

fichero. La cantidad de enteros que contiene el fichero se calcula asi:

//se asigna a size el tamaño en bytes del fichero

size = fichero.length(); //cada int en Java ocupa 4 bytes. Si dividimos el total de bytes entre 4 obtenemos el

número de //enteros que contiene el fichero.

size = size / 4;

package random2;

import java.io.FileNotFoundException;

import java.io.IOException; import java.io.RandomAccessFile;

import java.util.Scanner;

public class Random2{

public static void main(String[] args) {

Page 51: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

Scanner sc = new Scanner(System.in);

RandomAccessFile fichero = null;

int pos, numero;

long size;

try { fichero = new RandomAccessFile("/ficheros/enteros.dat", "rw");

//calcular cuántos enteros tiene el fichero

size = fichero.length(); size = size / 4;

System.out.println("El fichero tiene " + size + " enteros");

//Modificar el entero que se encuentra en una posición determinada do {

System.out.println("Introduce una posición (>=1 y <= " + size + "): ");

pos = sc.nextInt();

} while (pos < 1 || pos > size);

pos--; //la posición 1 realmente es la 0

//nos situamos en la posición (byte de inicio) del entero a modificar

//en Java un entero ocupa 4 bytes fichero.seek(pos*4);

//leemos y mostramos el valor actual

System.out.println("Valor actual: " + fichero.readInt());

//pedimos que se introduzca el nuevo valor

System.out.println("Introduce nuevo valor: ");

numero = sc.nextInt();

//nos situamos de nuevo en la posición del entero a modificar

//esto es necesario porque después de la lectura que hemos realizado para

mostrar

//el valor el puntero de lectura/escritura ha avanzado al siguiente entero del fichero.

//si no hacemos esto escribiremos sobre el siguiente entero

fichero.seek(pos*4);

//escribimos el entero

fichero.writeInt(numero);

} catch (FileNotFoundException ex) { System.out.println(ex.getMessage());

} catch (IOException ex) {

System.out.println(ex.getMessage());

}finally {

try { if (fichero != null) {

fichero.close();

}

} catch (IOException e) { System.out.println(e.getMessage());

}

Page 52: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

}

}

}

Ejemplo 3: Ejemplo de uso de un fichero de caracteres con acceso aleatorio. Se pide por teclado una palabra, la busca el fichero de texto texto.txt y la modifica

escribiéndola en mayúsculas cada vez que aparece en el fichero.

Para hacer el cambio de la palabra por su equivalente en mayúsculas, el programa lee el fichero por líneas. Para cada línea leída se comprueba si contiene la palabra buscada

y si es así se modifica y se sobrescribe la línea completa modificada.

package random3;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.util.Scanner;

public class Random3 {

public static void main(String[] args) { Scanner sc = new Scanner(System.in);

RandomAccessFile fichero = null;

String palabra, cadena;

StringBuilder auxBuilder; long pos = 0;

int indice;

try {

//se abre el fichero para lectura/escritura fichero = new RandomAccessFile("/ficheros/texto.txt", "rw");

//Se pide la palabra a buscar

System.out.print("Introduce palabra: ");

palabra = sc.nextLine();

//lectura del fichero

cadena = fichero.readLine(); //leemos la primera línea

while(cadena!=null){ //mientras no lleguemos al final del fichero indice = cadena.indexOf(palabra); //buscamos la palabra en la línea leída

while(indice!=-1){ //mientras la línea contenga esa palabra (por si está

repetida)

//paso la línea a un StringBuilder para modificarlo

auxBuilder = new StringBuilder(cadena);

auxBuilder.replace(indice, indice+palabra.length(),

palabra.toUpperCase());

cadena = auxBuilder.toString();

//nos posicionamos al principio de la línea actual y se sobrescribe la

//línea completa

//La posición donde empieza la línea actual la estoy guardando //en la variable pos

fichero.seek(pos);

Page 53: Ejercicio básico inicial 4 Programa java que declare cuatro … · 2018-05-15 · Ejercicio básico inicial 4 Programa java que declare cuatro variables enteras A, B, C y D y asígnale

fichero.writeBytes(cadena);

//compruebo si se repite la misma palabra en la línea

indice = cadena.indexOf(palabra);

} pos = fichero.getFilePointer(); //posición de la línea actual que voy a leer

cadena = fichero.readLine(); //lectura de la línea

}

} catch (FileNotFoundException ex) { System.out.println(ex.getMessage());

} catch (IOException ex) {

System.out.println(ex.getMessage());

}finally { try {

if (fichero != null) {

fichero.close();

}

} catch (IOException e) { System.out.println(e.getMessage());

}

}

} }