Você está na página 1de 7

Manipulando Arquivo Txt com Java Introduo Neste artigo utilizaremos as classes do pacote java.

io para criao de diretrios e arquivos. Tambm veremos como escrever e ler os arquivos criados, e outras funes disponveis neste pacote. Vamos tambm criar um layout simples de arquivo para armazenar informaes de objetos. 1. Criando diretrios e arquivos Para a criao de diretrios e arquivos em Java, podemos utilizar a classe java.io.File, vamos agora ver como isso pode ser feito. Para criar um diretrio devemos primeiro criar uma instncia da classe File para criar um objeto File. Em seu construtor passamos o local e o nome do diretrio que ser criado. java.io.File diretorio = new java.io.File(C:\\TutorialArquivos); Depois de criado o objeto e inserido o local e o nome do diretrio, vamos ento utilizar o mtodo mkdir() do objeto File criado. nesse momento que o diretrio ser criado. Este mtodo retorna um valor true ou false para indicar se o diretrio foi criado ou no. boolean statusDir = diretorio.mkdir(); System.out.print(statusDir); Temos agora um novo diretrio, vamos ento criar nosso primeiro arquivo neste diretrio. Para isso, criamos uma nova instncia de File e no construtor parssaremos em qual diretrio vamos cri-lo e qual ser o nome do arquivo. java.io.File arquivo = new java.io.File(diretorio, arq_01.txt); Feito o passo anterior, precisamos utilizar ento o mtodo createNewFile() para criar fisicamente o arquivo. Porm este mtodo possui em sua assinatura a exigncia de uma exceo do tipo java.io.IOException, que devemos utiliz-la. O mtodo tambm possui um retorno do tipo boleano. try { boolean statusArq = arquivo.createNewFile(); System.out.print(statusArq); } catch (IOException e) { e.printStackTrace(); } Agora est tudo criado, diretrio e arquivo. Pode conferir no diretrio C:\\.

2. Usando outros mtodos da classe File Vamos conhecer outros mtodos da classe java.io.File. Primeiro vamos usar o mtodo exists(), que retorna se um arquivo ou diretrio existe em um determinado local. O uso simples e nos retorna um valor boleano. Para utiliz-lo, devemos criar um objeto File e no construtor indicar o nome e/ou local do que procuramos. Vamos testar se nosso diretrio criado existe, e se existir, vamos ento testar se nosso arquivo criado existe. Para no criar dois novos objetos, vamos utilizar os dois objetos criados na sesso 1. if (dir.exists()) { System.out.println("Diretrio existe!");

if (arq.exists()) { System.out.println("Arquivo existe!"); } } Outro mtodo que podemos utilizar o listFiles(), ele nos retorna uma lista com todos arquivos e diretrios de um determinado diretrio. Devemos tambm criar um objeto File e indicar no construtor em qual local vamos fazer a pesquisa, neste exemplo vamos pesquisar no diretrio C:\\. File files = new File("C:\\"); for (File file : files.listFiles()) { System.out.println(file); } Vamos utilizar o mtodo renameTo() para renomear um arquivo e um diretrio. Precisamos criar um novo objeto para indicar o novo nome do arquivo. Vamos utilizar o diretrio e o arquivo anteriormente criados para este exemplo. File dir = new File("C:\\TutorialArquivos"); File arq = new File(dir, "arq_01.txt"); File arq2 = new File(dir, "arq_02.txt"); boolean statusRename = arq.renameTo(arq2); System.out.println("Renomedo: " + statusRename + " -> New name: " + arq); Veja que fizemos a chamada ao mtodo renameTo() atravs do objeto antigo arq. Criamos um novo objeto chamado arq2, onde indicamos o novo nome do arquivo. Passamos ento o objeto arq2 como parmetro no mtodo renameTo(arq2). Podemos tambm testar se um arquivo encontrado do tipo diretrio ou arquivo. Antes iremos criar mais alguns arquivos e diretrios dentro do nosso diretrio C:\\TutorialArquivos. Vamos tambm utilizar o mtodo getName() para ter como retorno o nome do arquivo encontrado. Veja no exemplo abaixo. File dir = new File("C:\\TutorialArquivos"); File dir2 = new File(dir + "\\DiretorioDois"); dir2.mkdirs(); File dir3 = new File(dir + "\\DiretorioTres"); dir3.mkdir(); File arq3 = new File(dir, "arq_03.txt"); try { arq3.createNewFile(); } catch (IOException e) { e.printStackTrace(); } for ( File f : dir.listFiles() ) { if ( f.isDirectory() ) { System.out.println(f + " um diretrio."); } else if (f.isFile()) { System.out.println(f.getName() + " um arquivo."); } } Por fim vamos utilizar o mtodo delete() no prximo exemplo, e excluir o arquivo e o diretrio que foram criados anteriormente.

System.out.println( dir3.delete() ); System.out.println( arq3.delete() ); Existem vrios outros mtodos na classe java.io.File alm dos citados aqui, veja voc mesmo e qualquer dvida leia a documentao dos mesmos. 3. Escrevendo em arquivo .txt Chegou a hora de aprendermos a escrever nos arquivos criados, para isso, vamos utilizar a classe java.io. PrintWriter. Existem varias classes no pacote java.io que possibilitam a escrita em arquivos, porm eu considero a PrintWriter a mais interessante delas pelos mtodos que ela oferece. Desta vez vamos criar uma classe chamada User e nela criar algumas variveis de instncia, conforme a listagem abaixo. import java.util.Date; public class User { private Integer id; private String nome; private String observacao; public User() { } public User(Integer id, String nome, String observacao) { this.id = id; this.nome = nome; this.observacao = observacao; } //Gere os mtodos getters e setters //Subscreva o mtodo toString() } Crie agora outra classe, chamada FileTestUser, nela iremos criar um mtodo main() e um mtodo para escrever no arquivo que ainda criaremos. import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; public class FileTestUser { public static void main(String[] args) { //criando um objeto User User user = new User(); user.setId(1); user.setNome("Bart Simpson"); user.setObservacao("Personagem de desenho animado."); //Chamando o mtodo escrever e passando user como parmetro escrever(user); }

private static void escrever(User user) { File dir = new File("C:\\TutorialArquivos"); File arq = new File(dir, "User.txt"); try { //neste ponto criamos o arquivo fisicamente arq.createNewFile(); //Devemos passar no construtor do FileWriter qual arquivo // vamos manipular. // Esse construtor aceita dois tipos de parmetros, // File ou String. //O parmetro true indica que reescrevemos no arquivo // sem apagar o que j existe. // O false apagaria o contedo do arquivo e escreveria // o novo contedo. // Se no usar o 2 parmetro, ele por padro ser false. //O mais importante, essa linha abre o fluxo do arquivo FileWriter fileWriter = new FileWriter(arq, false); //Agora vamos usar a classe PrintWriter para escrever //fisicamente no arquivo. //Precisamos passar o objeto FileReader em seu construtor PrintWriter printWriter = new PrintWriter(fileWriter); //Agora vamos escrever no arquivo com o mtodo println(), // que nos permite escrever linha a linha no arquivo printWriter.println(user.getId()); printWriter.println(user.getNome()); printWriter.println(user.getObservacao()); //o mtodo flush libera a escrita no arquivo printWriter.flush(); //No final precisamos fechar o arquivo printWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } A classe PrintWriter ainda nos fornece outros dois mtodos para escrita, o write() e o append(). A diferena deles para o mtodo println() que o ltimo escreve linha a linha conforme chamado, j os anteriores iro adicionando as palavras sempre na mesma linha. H tambm uma diferena entre o mtodo write() e append(), o primeiro no aceita null, j o segundo aceita null. Existem ainda os mtodos printf(), print() e format() e eles funcionam de maneira semelhante como quando os utilizamos em um System.out.print(), System.out.printf() ou System.out.format() respectivamente. 4. Lendo um arquivo .txt

Para ler o arquivo User.txt, vamos primeiro importar as classes java.io.FileReader e java.io.BufferedReader. Em seguida vamos criar o mtodo ler(). private static void ler() { File dir = new File("C:\\TutorialArquivos"); File arq = new File(dir, "User.txt"); try { //Indicamos o arquivo que ser lido FileReader fileReader = new FileReader(arq); //Criamos o objeto bufferReader que nos // oferece o mtodo de leitura readLine() BufferedReader bufferedReader = new BufferedReader(fileReader); //String que ir receber cada linha do arquivo String linha = ""; //Fazemos um loop linha a linha no arquivo, // enquanto ele seja diferente de null. //O mtodo readLine() devolve a linha na // posicao do loop para a variavel linha. while ( ( linha = bufferedReader.readLine() ) != null) { //Aqui imprimimos a linha System.out.println(linha); } //liberamos o fluxo dos objetos ou fechamos o arquivo fileReader.close(); bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } Caso voc deseje recuperar os dados do arquivo para o objeto User, dever criar um layout para o arquivo. Salvar as informaes na mesma linha seria o mais aconselhvel caso o mesmo arquivo guarde mais de um User. Esse layout pode ser por posies, tipo o id vai da posio 0 5, o nome da posio 6 26, e assim por diante. Outro modo seria ao invs de guardar posies, criar um carcter que determine que o campo id terminasse quando encontrasse esse carcter e est comeando o campo nome, poderia ser, por exemplo, um ponto e vrgula, ou qualquer outro carcter que voc tem certeza que no seria usado naquele objeto.

5. Usando um layout simples Vamos agora criar uma nova classe chamada TestLayout. Vamos criar vrios users e depois inserir em um arquivo, onde usaremos o ; para separar os atributos de cada user. E cada nova linha do arquivo conter um novo user. import java.util.*; import java.io.*; import java.util.ArrayList;

public class FileTestUser { public static void main(String[] args) { //Criamos 6 users User user1 = new User(1, "Ronaldinho Gacho", "Jogador de Futebol"); User user2 = new User(2, "Nelson Piquet", "Piloto de Fmula 1"); User user3 = new User(3, "Monteiro Lobato", "Escritor"); User user4 = new User(4, "Luana Piovani", "Atriz"); User user5 = new User(5, "Ana Maria Braga", "Apresentadora de Televiso"); User user6 = new User(6, "Joo Carlos", "Programador JEE"); //adicionamos os users em um lista List<User> userList = new ArrayList<User>(); userList.add(user1); userList.add(user2); userList.add(user3); userList.add(user4); userList.add(user5); userList.add(user6); //passamos a lista por parmetro layout(userList); } private static void layout(List<User> users) { File dir = new File("C:\\TutorialArquivos"); //Cria um novo arquivo File arq = new File(dir, "User2.txt"); try { arq.createNewFile(); FileWriter fileWriter = new FileWriter(arq, false); PrintWriter printWriter = new PrintWriter(fileWriter); //Utilizamos o mtodo print() para escrever na // mesma linha e um ponto e vrgula no final. //O println forar a troca de linha // para o prximo user. for (User user : users) { printWriter.print(user.getId() + ";"); printWriter.print(user.getNome() + ";"); printWriter.println(user.getObservacao()); } printWriter.flush(); printWriter.close(); } catch (IOException e) { e.printStackTrace(); } try { FileReader fileReader = new FileReader(arq); BufferedReader bufferedReader = new BufferedReader(fileReader); String linha = ""; //Lista que ir guardar o resultado, ou seja, // cada linha do arquivo que corresponde a um User

List<String> result = new ArrayList<String>(); while ((linha = bufferedReader.readLine()) != null) { System.out.println(linha); if (linha != null && !linha.isEmpty()) { result.add(linha); } } fileReader.close(); bufferedReader.close(); for (String s : result) { //Usamos o mtodo split da classe String // para separar as partes entre os ponto e vrgulas. //Guardamos o resultado em um array String[] user = s.split(";"); //Criamos um objeto User e setamos em seus atributos //as posies correspondentes do array User u = new User(); u.setId(Integer.valueOf(user[0])); u.setNome(user[1]); u.setObservacao(user[2]); //exibe o contedo do objeto u System.out.println(u.toString()); } } catch (IOException e) { e.printStackTrace(); } } } Concluso Neste artigo vimos como utilizar alguns mtodos importantes do pacote java.io. Aprendemos a criar, excluir e renomear arquivos e diretrios, entre outros mtodos da classe File. Tambm aprendemos a escrever em arquivos e como ler os mesmos, e por fim, um pequeno exemplo para trabalhar com arquivo no estilo layout. Fica como dica a criao do seu prprio layout de arquivo.