StringBuilder e StringBuffer

As classes java.lang.StringBuilder e java.lang.StringBuffer precisam ser utilizadas quando você tiver que fazer diversas modificações em Strings.

Um uso comum de objetos StringBuilder e StringBuffer é na E/S de arquivos, quando fluxos amplos de entrada e com alteração constante estão sendo manuseados pelo programa.

A classe StringBuilder foi acrescentada no Java 5. Ela tem justamente a mesma API que a classe StringBuffer, exceto por StringBuilder não ser seguro em relação aos threads.

Ou seja, seus métodos não são sincronizados.

Analise um exemplo completo, que esquematiza uma comparação entre as classes StringBuilder e String.


        package devmedia;
        public class StringTeste {
        /**
        * @param args
        */
        public static void main(String[] args) {
        String j = "abc";
        System.out.println(j.hashCode());
        j=j.concat("def");
        System.out.println(j);
        System.out.println(j.hashCode());
        System.out.println();

        StringBuffer sb = new StringBuffer("abc");
        System.out.println(sb.hashCode());
        sb.append("def");
        System.out.println("sb: "+sb);
        System.out.println(sb.hashCode());
        }
        }
        

Saída:
96354
abcdef
-1424385949
2031692173
sb: abcdef
2031692173

Classe File

Objetos File são empregados para representar os arquivos.

Iniciamos com alguns exemplos simples de criação de arquivos, de leitura e de escrita a partir deles.

Iremos criar um novo arquivo. Veja o código:


        import java.io.File;
        import java.io.IOException;
        public class WriterMain {
        /**
        * @param args
        */
        public static void main(String[] args) {
        try{
        boolean newArquivo = false;
        File f = new File("arquivo.txt");
        System.out.println(f.exists());
        novoArquivo = f.createNewFile();
        System.out.println(newArquivo);
        System.out.println(f.exists());
        }catch (IOException e) {
        }
        }
        }
        

Saída:
false
true
true

A variável newArquivo, inicialmente, é atribuida com false. É gerado um objeto File, mas não um arquivo físico ainda. O método f.exists() serve para termos ciência, se de fato há um arquivo no disco rígido.

A possível exceção pode ser decorrência da incapacidade em se criar o arquivo, por uma questão de permissão, ou de caminho errado.

FileReader e FileWriter

Veja o código abaixo.


        package devmedia;
        import java.io.File;
        import java.io.FileWriter;
        import java.io.IOException;
        public class GeraArquivo {
        /**
        * @param args
        */
        public static void main(String[] args) {
        try{
        File fl = new File("testando.txt");
        fl.createNewFile();
        System.out.println(fl.getAbsolutePath());
        FileWriter fw = new FileWriter(fl);
        fw.write("Java\nDevmedia");
        fw.flush();
        fw.close();
        }catch (IOException e) {
        }
        }
        }
        

Vamos analisar.

  1. FileWriter fw = new FileWriter(file) realize 3 tarefas:
    1. Criou uma variável de referência FileWriter.
    2. Criou um objeto FileWriter e o atribuiu a fw.
    3. Criou um arquivo vazio em disco.
  2. Escrevemos no arquivo, com o método write(), realizamos um flush() e um close().

O método flush() garante que a última parte dos dados seja realmente escrita no arquivo.

Sempre que finalizar a utilização de um arquivo, seja escrevendo ou lendo nele, é necessário chamar o método close().

Continuaremos falando um pouco mais sobre a API java para tratamento de arquivos.


Leia todos artigos da série