SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
SCJP 6
  Clase 10 – Strings, I/O




    Ezequiel Aranda
Sun Microsystems Campus
      Ambassador
Disclaimer & Acknowledgments
> Even though Ezequiel Aranda is a full-time employee of Sun
  Microsystems, the contents here are created as his own
  personal endeavor and thus does not reflect any official
  stance of Sun Microsystems.
> Sun Microsystems is not responsible for any inaccuracies in
  the contents.
> This slides are Licensed under a Creative Commons
  Attribution – Noncommercial – Share Alike 3.0
   > http://creativecommons.org/licenses/by-nc-sa/3.0/
AGENDA

>  trings
 S
>  tringBuilder y
 S
 StringBuffer
>  anejo del sistema
 M
 de archivos
String

>  l concepto clave del String es entender que,
 E
 una vez creado un objeto de este tipo, no
 puede ser modificado.
>  ntonces, ¿qué es lo que realmente sucede
 E
 cuando modificamos un String?
Creando un String

  String s = "abcdef";
>  rea un nuevo objeto de la clase String con el
 C
 valor “abcdef”, y se lo asigna a la referencia
 ‘s’.

  String s2 = s;
>  signa el mismo string a la referencia s2.
 A
Modificando un String

  s = s.concat(" more stuff");
>  concat” añade un literal al final del String…
 “

>  Pero, ¿No habíamos
 …
 dicho que los Strings
 eran inmutables?
Modificando un String (II)
>  n realidad, el objeto String es inmutable,
 E
 pero la referencia no lo es.
>  or lo tanto, lo que sucede es lo siguiente:
 P
  >  a JVM crea un nuevo String y le da el valor que
   L
   resulta de concatenar “abcdef” y “ more stuff”.
  >  uego, actualiza ‘s’ para referenciar al nuevo
   L
   String.
>  bservaciones
 O
  >  écnicamente, ahora hay 3 Strings: “abcdef,” “
   T
   more stuff” y “abcdef more stuff”.
  > s2’ aún hace referencia a “abcdef”.
   ‘
Pregunta

  String s1 = "spring ";
  String s2 = s1 + "summer ";
  s1.concat("fall ");
  s2.concat(s1);
  s1 += "winter ";
  System.out.println(s1 + " " + s2);
>  Qué imprime?
 ¿
>  Cuántos objetos se crearon?
 ¿
Strings y Memoria

> Para que el manejo de memoria sea más eficiente,
  la JVM reserva una porción de memoria conocida
  como “String Pool”.
> La regla es la siguiente:
  cuando el compilador
  encuentra un literal, se
  fija en el pool a ver si
  hay alguno que
  coincida, si es así la
  referencia es dirigida al
  literal existente, y no se
  crea un nuevo literal.
Strings y Memoria (II)

>  sto es lo que hace a la inmutabilidad una
 E
 buena idea.
>  i una de varias referencias al mismo String
 S
 pudiese modificarlo, sería desastroso.
>  ero… ¿Qué pasa si alguien sobrescribe la
 P
 funcionalidad de la clase String? ¿Podría
 causar problemas en el pool?
Pero… ¿Qué pasa si alguien
                    sobrescribe la funcionalidad
                     de la clase String? ¿Podría
                      causar problemas en el
                                pool?




>  ada, porque la clase String es final.
 N
Métodos importantes de la clase
             String
    Método           Tipo de retorno                     Descripción

charAt(int index)         char         Retorna el carácter ubicado en la posición index

                                        Retorna el String que resulta de concatenar el
 concat(String s)        String
                                         String utilizado para invocar el método y s.

equalsIgnoreCase(                      Retorna true si el contenido de ambos strings es
                        boolean
    String s)                             igual, ignorando mayusculas/ minusculas

                                         La longitud del String usado para invocar el
    length()               int
                                                           método


replace(char old,                       Retorna un String resultado de reemplazar el
                         String
   char new)                                carácter “old” por el carácter “new”
Métodos importantes de la clase
           String (II)
    Método          Tipo de retorno                     Descripción

substring(int a) 
                                         Retorna una subcadena que va desde la
substring (int a,       String
                                            posición ‘a’ hasta la posición ‘b’
     int b)
                                      Retorna un String cuyo valor es el del utilizado
toLowerCase()           String          para invocar el método, pero con todas las
                                       mayúsculas intercambiadas por minúsculas .

   toString()           String                      El valor del String.


                                          Funciona igual que toLowerCase, pero
toUpperCase()           String
                                       intercambiando minúsculas por mayúsculas.

                                      Retorna un String cuyo valor es el del utilizado
     trim()             String         para invocar el método pero sin espacios al
                                             principio o al final de la cadena.
StringBuffer y StringBuilder

>  eben utilizarse cuando debemos hacer
 D
 muchas modificaciones en un String.
  >  i modificamos muchas veces una gran cantidad
   S
   de Strings terminaremos con un pool gigante de
   Strings abandonados.
>  n uso común de StringBuffer es la
 U
 manipulación de archivos:
  >  ratamos al archivo como un gran bloque de
   T
   datos, los cerramos y luego podemos reutilizar el
   buffer para el siguiente archivo.
¿StringBuffer o StringBuilder?

>  on exactamente iguales, con la excepción de
 S
 que StringBuffer es thread safe mientras que
 StringBuilder no lo es.
>  omo siempre, es recomendable, por razones
 C
 de rendimiento, usar la clase que no es
 thread safe salvo que nos encontremos en un
 entorno multi hilo.
Usando StringBuffer/Builder

>  tilizando Strings:
 U
  String x = "abc";
  x = x.concat("def");
>  tilizando StringBuffer/Builder
 U
  StringBuffer x= new StringBuffer("abc");
  x.append("def");
>  n ambos casos, si imprimimos el valor de x,
 E
 el mismo será “abcdef”, pero en el caso del
 String, hemos abandonado en el pool al
 String “abc” original.
Métodos importantes de
                  StringBuffer/Builder
     Método               Tipo de retorno                        Descripción
                                               Retorna el StringB que resulta de concatenar el
append (String s)       StringBuffer/Builder    StringB utilizado para invocar el método y el
                                                                   String s.
                                               Retorna un StringB que resulta de eliminar del
delete(int a, int b)    StringBuffer/Builder    invocante la subcadena delimitada por ‘a’ (0
                                                           based) y ‘b’ (1 based).
                                               Retorna un StringB que resulta de insertar en el
insert(int a, String 
                        StringBuffer/Builder      invocante la subcadena ‘b’ a partir de la
         b)
                                                                posición ‘a’.
                                                Retorna un StringB que resulta de invertir el
     reverse()          StringBuffer/Builder
                                                                invocante.

    toString()                 String              Retorna el valor del StringB invocante

Nota: si bien estos métodos “retornan” un StringB, en realidad
modifican el invocante y retornan una referencia al mismo.
Clases para el manejo de archivos

>  ile: representación abstracta de un
 F
 pathname. Se usa para realizar operaciones
 como crear, buscar y borrar archivos y
 directorios.
>  ileReader: utilizada para leer archivos de
 F
 caracteres. En general se utilizan wrappers
 más específicos.
>  ufferedReader: un wrapper de FileReader
 B
 que utiliza buffers para aumentar la
 eficiencia.
Clases para el manejo de archivos (II)

>  ileWriter: la contraparte de FileReader, al
 F
 igual que con esta última, en general se
 utilizan wrappers más versátiles y eficientes.
>  ufferedWriter: la contraparte de
 B
 BufferedReader para escrituras. Provee
 escritura por líneas.
>  rintWriter: Un writer con varios métodos que
 P
 lo vuelven muy flexible y versátil.
Creando un archivo utilizando File
class Writer1 {
public static void main(String [] args) {
try {
  boolean newFile = false;
  File file = new File ("fileWrite1.txt"); //un
  objeto File
  System.out.println(file.exists()); // ¿existe el
  archivo?
  newFile = file.createNewFile();     // lo creamos
  System.out.println(newFile);
  System.out.println(file.exists()); // ¿ahora si?
}
catch(IOException e) { }
}
}
Creando un archivo utilizando File (II)

>  rimera ejecución:
 P
  >  xists retorna false.
   e
  >  reateNewFile retorna true.
   c
  >  l segundo exists retorna true.
   E
>  egunda ejecución:
 S
  >  xists retorna true.
   e
  >  reateNewFile retorna false.
   c
  >  l segundo exists retorna true.
   E
Usando FileWriter y FileReader
class Writer2 {
  public static void main(String [] args) {
   char[] in = new char[50];
   // para almacenar el input
   int size = 0;
   try {
      File file = new File("fileWrite2.txt”);
      // creamos un objeto file
      FileWriter fw = new FileWriter(file);
      // y un objeto FileWriter
      fw.write("howdynfolksn");
      // escribimos algunos caracteres
      fw.flush(); // flush
      fw.close(); // close
Usando FileWriter y FileReader (II)
          FileReader fr = new FileReader(file);
          // creamos un objeto FileReader
          size = fr.read(in);
          // Leemos el archivo completo
          System.out.print(size + " ");
          // cantidad de bytes que leimos
          for(char c : in)
          // imprimimos el array
          System.out.print(c);
          fr.close(); // cerramos el archivo
        }
        catch(IOException e) { }
    }
}
Parte de java.io necesaria para el examen SCJP
                 Extiende Argumentos clave de los
    Clase                                           Métodos clave
                    de        constructores
                                                    createNewFile()  
                                                         delete()  
                                                         exists()  
                                 File, String
                                                      isDirectory()  
     File        Object             String
                                                          isFile()  
                                Strin, String
                                                            list()  
                                                         mkdir()  
                                                       renameTo() 
                                                        close()
                                    File
  FileWriter      Writer                                flush()
                                   String
                                                        write()

                                                       close()
                                                       flush()
BufferedWriter    Writer           Writer
                                                      newLine()
                                                       write()
Parte de java.io necesaria para el examen SCJP (II)
                 Extiende   Argumentos clave de
    Clase                                           Métodos clave
                    de        los constructores

                                                         close()  
                                File (java 5)
                                                         flush()  
                               String (java 5)
 PrintWriter      Writer                          format()*, prinI()*  
                               OutputStream
                                                    print(), println()  
                                   Writer
                                                         write()



                                    File
  FileReader     Reader                                  read()
                                   String




                                                        read()
BufferedReader   Reader           Reader
                                                      readLine()
Trabajando con archivos y directorios

> File file = new File("foo");
  >  i “foo” no existe, no se crea hasta que lo
   S
   ordenemos con createNewFile().
  >  i “foo” existe, el objeto file ahora se refiere a
   S
   dicho archivo.
>  i, en cambio, queremos crear un archivo:
 S
  > File file = new File("foo");
    file.createNewFile();
  > File file = new File("foo");
    PrintWriter pw = new PrintWriter(file);
Trabajando con archivos y directorios (II)

>  l caso de los directorios es similar:
 E
  File myDir = new File("mydir");
  myDir.mkdir();
  File myFile = new File(myDir, "myFile.txt");

  myFile.createNewFile();

>  i bien creando un writer podemos crear un
 S
 archivo sin necesidad de llamar a
 createNewFile(), los directorios nunca se
 crean sin un mkdir().
Trabajando con archivos y directorios (III)

// creamos un directorio
File delDir = new File("deldir");
delDir.mkdir();
// agregamos un archivo al directorio
File delFile1 = new File(delDir, "delFile1.txt");
delFile1.createNewFile();
// agregamos otro archivo al directorio
File delFile2 = new File(delDir, "delFile2.txt");
delFile2.createNewFile();
// borramos delFile1
delFile1.delete();
Trabajando con archivos y directorios (IV)

// intentamos borrar el directorio
System.out.println(“delDir is” + delDir.delete());
// creamos un nuevo objeto
File newName = new File(delDir, "newName.txt");
// renombramos el archivo
delFile2.renameTo(newName);
// de la misma forma, renombramos el directorio
File newDir = new File("newDir");
delDir.renameTo(newDir);
Trabajando con archivos y directorios (V)

>  e lo anterior, podemos observar que:
 D
  >  elete() no borra un directorio si no está vacío.
   d
  >  enameTo() debe recibir un objeto File valido del
   r
   cual tomará el nombre.
  >  enameTo() puede renombrar un directorio si no
   r
   está vacío.
Buscar archivos

>  sumiendo que tenemos un directorio
 A
 llamado “searchThis”, podemos iterar a
 través del mismo en busca de un archivo con:
  String[] files = new String[100];
  File search = new File("searchThis");
  files = search.list();
  for(String fn : files)
    System.out.println("found " + fn);
Preguntas

Más contenido relacionado

La actualidad más candente

La actualidad más candente (8)

Chap 15cpin
Chap 15cpinChap 15cpin
Chap 15cpin
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)
 
2o departamental Programacion 3
2o departamental Programacion 32o departamental Programacion 3
2o departamental Programacion 3
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Greenfoot 5
Greenfoot 5Greenfoot 5
Greenfoot 5
 

Destacado

Cultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y AlcancesCultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y Alcancesflekoso
 
Introducción a JavaFX
Introducción a JavaFXIntroducción a JavaFX
Introducción a JavaFXflekoso
 
SCJP, Clase 5: Control de Flujo
SCJP, Clase 5: Control de FlujoSCJP, Clase 5: Control de Flujo
SCJP, Clase 5: Control de Flujoflekoso
 
De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutosflekoso
 
SCJP, Clase 6: Collections
SCJP, Clase 6: CollectionsSCJP, Clase 6: Collections
SCJP, Clase 6: Collectionsflekoso
 
SCJP, Clase 4: Operadores
SCJP, Clase 4: OperadoresSCJP, Clase 4: Operadores
SCJP, Clase 4: Operadoresflekoso
 
SCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner ClassesSCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner Classesflekoso
 
SCJP, Clase 7: Generics
SCJP, Clase 7: GenericsSCJP, Clase 7: Generics
SCJP, Clase 7: Genericsflekoso
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friendflekoso
 
SCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, PooSCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, Pooflekoso
 
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...flekoso
 
JavaFX 1.2 - Introducción
JavaFX 1.2 - IntroducciónJavaFX 1.2 - Introducción
JavaFX 1.2 - Introducciónflekoso
 
Clase math tablas SEMESTRE 2
Clase math tablas SEMESTRE 2Clase math tablas SEMESTRE 2
Clase math tablas SEMESTRE 2K Manuel TN
 
Índice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordÍndice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordTelefónica
 
Introducción a la Programación con Java
Introducción a la Programación con JavaIntroducción a la Programación con Java
Introducción a la Programación con Javaflekoso
 

Destacado (15)

Cultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y AlcancesCultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y Alcances
 
Introducción a JavaFX
Introducción a JavaFXIntroducción a JavaFX
Introducción a JavaFX
 
SCJP, Clase 5: Control de Flujo
SCJP, Clase 5: Control de FlujoSCJP, Clase 5: Control de Flujo
SCJP, Clase 5: Control de Flujo
 
De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutos
 
SCJP, Clase 6: Collections
SCJP, Clase 6: CollectionsSCJP, Clase 6: Collections
SCJP, Clase 6: Collections
 
SCJP, Clase 4: Operadores
SCJP, Clase 4: OperadoresSCJP, Clase 4: Operadores
SCJP, Clase 4: Operadores
 
SCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner ClassesSCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner Classes
 
SCJP, Clase 7: Generics
SCJP, Clase 7: GenericsSCJP, Clase 7: Generics
SCJP, Clase 7: Generics
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friend
 
SCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, PooSCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, Poo
 
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
 
JavaFX 1.2 - Introducción
JavaFX 1.2 - IntroducciónJavaFX 1.2 - Introducción
JavaFX 1.2 - Introducción
 
Clase math tablas SEMESTRE 2
Clase math tablas SEMESTRE 2Clase math tablas SEMESTRE 2
Clase math tablas SEMESTRE 2
 
Índice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordÍndice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWord
 
Introducción a la Programación con Java
Introducción a la Programación con JavaIntroducción a la Programación con Java
Introducción a la Programación con Java
 

Similar a SCJP, Clase 10: Strings, I/O

Similar a SCJP, Clase 10: Strings, I/O (20)

Clase10 stringsio
Clase10 stringsioClase10 stringsio
Clase10 stringsio
 
Uso de cadenas en java
Uso de cadenas en javaUso de cadenas en java
Uso de cadenas en java
 
Longitud de cadena y funciones en java
Longitud de cadena y funciones en javaLongitud de cadena y funciones en java
Longitud de cadena y funciones en java
 
Libreria c++
Libreria c++Libreria c++
Libreria c++
 
14 tiposdemetodos
14 tiposdemetodos14 tiposdemetodos
14 tiposdemetodos
 
Semana03 prog ii
Semana03 prog iiSemana03 prog ii
Semana03 prog ii
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignaciones
 
Lenguaje de Programacion - Java
Lenguaje de Programacion - JavaLenguaje de Programacion - Java
Lenguaje de Programacion - Java
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
Lenguajes de Programación: Tutorial csharp
Lenguajes de Programación: Tutorial csharpLenguajes de Programación: Tutorial csharp
Lenguajes de Programación: Tutorial csharp
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
Strings
StringsStrings
Strings
 
Apoo v
Apoo vApoo v
Apoo v
 
Tema 7 www.fresymetal.com
Tema 7 www.fresymetal.comTema 7 www.fresymetal.com
Tema 7 www.fresymetal.com
 
Tipo de Operadores
Tipo de OperadoresTipo de Operadores
Tipo de Operadores
 
Codigos C+++
Codigos C+++Codigos C+++
Codigos C+++
 
Utilización de la clase math
Utilización de la clase mathUtilización de la clase math
Utilización de la clase math
 
Códigos c++
Códigos c++Códigos c++
Códigos c++
 
Leccion 12 Java
Leccion 12 JavaLeccion 12 Java
Leccion 12 Java
 

Último

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 

Último (20)

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 

SCJP, Clase 10: Strings, I/O

  • 1. SCJP 6 Clase 10 – Strings, I/O Ezequiel Aranda Sun Microsystems Campus Ambassador
  • 2. Disclaimer & Acknowledgments > Even though Ezequiel Aranda is a full-time employee of Sun Microsystems, the contents here are created as his own personal endeavor and thus does not reflect any official stance of Sun Microsystems. > Sun Microsystems is not responsible for any inaccuracies in the contents. > This slides are Licensed under a Creative Commons Attribution – Noncommercial – Share Alike 3.0 > http://creativecommons.org/licenses/by-nc-sa/3.0/
  • 3. AGENDA >  trings S >  tringBuilder y S StringBuffer >  anejo del sistema M de archivos
  • 4. String >  l concepto clave del String es entender que, E una vez creado un objeto de este tipo, no puede ser modificado. >  ntonces, ¿qué es lo que realmente sucede E cuando modificamos un String?
  • 5. Creando un String String s = "abcdef"; >  rea un nuevo objeto de la clase String con el C valor “abcdef”, y se lo asigna a la referencia ‘s’. String s2 = s; >  signa el mismo string a la referencia s2. A
  • 6. Modificando un String s = s.concat(" more stuff"); >  concat” añade un literal al final del String… “ >  Pero, ¿No habíamos … dicho que los Strings eran inmutables?
  • 7. Modificando un String (II) >  n realidad, el objeto String es inmutable, E pero la referencia no lo es. >  or lo tanto, lo que sucede es lo siguiente: P >  a JVM crea un nuevo String y le da el valor que L resulta de concatenar “abcdef” y “ more stuff”. >  uego, actualiza ‘s’ para referenciar al nuevo L String. >  bservaciones O >  écnicamente, ahora hay 3 Strings: “abcdef,” “ T more stuff” y “abcdef more stuff”. > s2’ aún hace referencia a “abcdef”. ‘
  • 8. Pregunta String s1 = "spring "; String s2 = s1 + "summer "; s1.concat("fall "); s2.concat(s1); s1 += "winter "; System.out.println(s1 + " " + s2); >  Qué imprime? ¿ >  Cuántos objetos se crearon? ¿
  • 9. Strings y Memoria > Para que el manejo de memoria sea más eficiente, la JVM reserva una porción de memoria conocida como “String Pool”. > La regla es la siguiente: cuando el compilador encuentra un literal, se fija en el pool a ver si hay alguno que coincida, si es así la referencia es dirigida al literal existente, y no se crea un nuevo literal.
  • 10. Strings y Memoria (II) >  sto es lo que hace a la inmutabilidad una E buena idea. >  i una de varias referencias al mismo String S pudiese modificarlo, sería desastroso. >  ero… ¿Qué pasa si alguien sobrescribe la P funcionalidad de la clase String? ¿Podría causar problemas en el pool?
  • 11. Pero… ¿Qué pasa si alguien sobrescribe la funcionalidad de la clase String? ¿Podría causar problemas en el pool? >  ada, porque la clase String es final. N
  • 12. Métodos importantes de la clase String Método Tipo de retorno Descripción charAt(int index) char Retorna el carácter ubicado en la posición index Retorna el String que resulta de concatenar el concat(String s) String String utilizado para invocar el método y s. equalsIgnoreCase( Retorna true si el contenido de ambos strings es boolean String s) igual, ignorando mayusculas/ minusculas La longitud del String usado para invocar el length() int método replace(char old,  Retorna un String resultado de reemplazar el String char new) carácter “old” por el carácter “new”
  • 13. Métodos importantes de la clase String (II) Método Tipo de retorno Descripción substring(int a)  Retorna una subcadena que va desde la substring (int a, String posición ‘a’ hasta la posición ‘b’ int b) Retorna un String cuyo valor es el del utilizado toLowerCase() String para invocar el método, pero con todas las mayúsculas intercambiadas por minúsculas . toString() String El valor del String. Funciona igual que toLowerCase, pero toUpperCase() String intercambiando minúsculas por mayúsculas. Retorna un String cuyo valor es el del utilizado trim() String para invocar el método pero sin espacios al principio o al final de la cadena.
  • 14. StringBuffer y StringBuilder >  eben utilizarse cuando debemos hacer D muchas modificaciones en un String. >  i modificamos muchas veces una gran cantidad S de Strings terminaremos con un pool gigante de Strings abandonados. >  n uso común de StringBuffer es la U manipulación de archivos: >  ratamos al archivo como un gran bloque de T datos, los cerramos y luego podemos reutilizar el buffer para el siguiente archivo.
  • 15. ¿StringBuffer o StringBuilder? >  on exactamente iguales, con la excepción de S que StringBuffer es thread safe mientras que StringBuilder no lo es. >  omo siempre, es recomendable, por razones C de rendimiento, usar la clase que no es thread safe salvo que nos encontremos en un entorno multi hilo.
  • 16. Usando StringBuffer/Builder >  tilizando Strings: U String x = "abc"; x = x.concat("def"); >  tilizando StringBuffer/Builder U StringBuffer x= new StringBuffer("abc"); x.append("def"); >  n ambos casos, si imprimimos el valor de x, E el mismo será “abcdef”, pero en el caso del String, hemos abandonado en el pool al String “abc” original.
  • 17. Métodos importantes de StringBuffer/Builder Método Tipo de retorno Descripción Retorna el StringB que resulta de concatenar el append (String s) StringBuffer/Builder StringB utilizado para invocar el método y el String s. Retorna un StringB que resulta de eliminar del delete(int a, int b) StringBuffer/Builder invocante la subcadena delimitada por ‘a’ (0 based) y ‘b’ (1 based). Retorna un StringB que resulta de insertar en el insert(int a, String  StringBuffer/Builder invocante la subcadena ‘b’ a partir de la b) posición ‘a’. Retorna un StringB que resulta de invertir el reverse() StringBuffer/Builder invocante. toString() String Retorna el valor del StringB invocante Nota: si bien estos métodos “retornan” un StringB, en realidad modifican el invocante y retornan una referencia al mismo.
  • 18. Clases para el manejo de archivos >  ile: representación abstracta de un F pathname. Se usa para realizar operaciones como crear, buscar y borrar archivos y directorios. >  ileReader: utilizada para leer archivos de F caracteres. En general se utilizan wrappers más específicos. >  ufferedReader: un wrapper de FileReader B que utiliza buffers para aumentar la eficiencia.
  • 19. Clases para el manejo de archivos (II) >  ileWriter: la contraparte de FileReader, al F igual que con esta última, en general se utilizan wrappers más versátiles y eficientes. >  ufferedWriter: la contraparte de B BufferedReader para escrituras. Provee escritura por líneas. >  rintWriter: Un writer con varios métodos que P lo vuelven muy flexible y versátil.
  • 20. Creando un archivo utilizando File class Writer1 { public static void main(String [] args) { try { boolean newFile = false; File file = new File ("fileWrite1.txt"); //un objeto File System.out.println(file.exists()); // ¿existe el archivo? newFile = file.createNewFile(); // lo creamos System.out.println(newFile); System.out.println(file.exists()); // ¿ahora si? } catch(IOException e) { } } }
  • 21. Creando un archivo utilizando File (II) >  rimera ejecución: P >  xists retorna false. e >  reateNewFile retorna true. c >  l segundo exists retorna true. E >  egunda ejecución: S >  xists retorna true. e >  reateNewFile retorna false. c >  l segundo exists retorna true. E
  • 22. Usando FileWriter y FileReader class Writer2 { public static void main(String [] args) { char[] in = new char[50]; // para almacenar el input int size = 0; try { File file = new File("fileWrite2.txt”); // creamos un objeto file FileWriter fw = new FileWriter(file); // y un objeto FileWriter fw.write("howdynfolksn"); // escribimos algunos caracteres fw.flush(); // flush fw.close(); // close
  • 23. Usando FileWriter y FileReader (II) FileReader fr = new FileReader(file); // creamos un objeto FileReader size = fr.read(in); // Leemos el archivo completo System.out.print(size + " "); // cantidad de bytes que leimos for(char c : in) // imprimimos el array System.out.print(c); fr.close(); // cerramos el archivo } catch(IOException e) { } } }
  • 24. Parte de java.io necesaria para el examen SCJP Extiende Argumentos clave de los Clase Métodos clave de constructores createNewFile()   delete()   exists()   File, String isDirectory()   File Object String isFile()   Strin, String list()   mkdir()   renameTo()  close() File FileWriter Writer flush() String write() close() flush() BufferedWriter Writer Writer newLine() write()
  • 25. Parte de java.io necesaria para el examen SCJP (II) Extiende Argumentos clave de Clase Métodos clave de los constructores close()   File (java 5) flush()   String (java 5) PrintWriter Writer format()*, prinI()*   OutputStream print(), println()   Writer write() File FileReader Reader read() String read() BufferedReader Reader Reader readLine()
  • 26. Trabajando con archivos y directorios > File file = new File("foo"); >  i “foo” no existe, no se crea hasta que lo S ordenemos con createNewFile(). >  i “foo” existe, el objeto file ahora se refiere a S dicho archivo. >  i, en cambio, queremos crear un archivo: S > File file = new File("foo"); file.createNewFile(); > File file = new File("foo"); PrintWriter pw = new PrintWriter(file);
  • 27. Trabajando con archivos y directorios (II) >  l caso de los directorios es similar: E File myDir = new File("mydir"); myDir.mkdir(); File myFile = new File(myDir, "myFile.txt"); myFile.createNewFile(); >  i bien creando un writer podemos crear un S archivo sin necesidad de llamar a createNewFile(), los directorios nunca se crean sin un mkdir().
  • 28. Trabajando con archivos y directorios (III) // creamos un directorio File delDir = new File("deldir"); delDir.mkdir(); // agregamos un archivo al directorio File delFile1 = new File(delDir, "delFile1.txt"); delFile1.createNewFile(); // agregamos otro archivo al directorio File delFile2 = new File(delDir, "delFile2.txt"); delFile2.createNewFile(); // borramos delFile1 delFile1.delete();
  • 29. Trabajando con archivos y directorios (IV) // intentamos borrar el directorio System.out.println(“delDir is” + delDir.delete()); // creamos un nuevo objeto File newName = new File(delDir, "newName.txt"); // renombramos el archivo delFile2.renameTo(newName); // de la misma forma, renombramos el directorio File newDir = new File("newDir"); delDir.renameTo(newDir);
  • 30. Trabajando con archivos y directorios (V) >  e lo anterior, podemos observar que: D >  elete() no borra un directorio si no está vacío. d >  enameTo() debe recibir un objeto File valido del r cual tomará el nombre. >  enameTo() puede renombrar un directorio si no r está vacío.
  • 31. Buscar archivos >  sumiendo que tenemos un directorio A llamado “searchThis”, podemos iterar a través del mismo en busca de un archivo con: String[] files = new String[100]; File search = new File("searchThis"); files = search.list(); for(String fn : files) System.out.println("found " + fn);