Manejo de arquivos com JSP
Neste explicaremos basicamente a leitura, modificação e escritura de arquivos de texto. Para isto construiremos a classe FileManager que, através de seus métodos, permitirá executar tais operações.Por Fernando Arturi
Publicado em: 10/11/06
Os comentários escritos dentro do código, explicam passo a passo que coisa está sendo executada em cada momento.
- A função readFile, dado um nome de arquivo (com o "caminho" incluído. Ex. D:\files\prova.txt), devolve um objeto de tipo StringBuffer com o conteúdo do mesmo.
- O método saveFile , toma como primeiro parâmetro o nome do arquivo que se deseja gerar ou modificar, o segundo parâmetro é o conteúdo que se deseja introduzir no tal arquivo. Por fim, o terceiro parâmetro é uma variável do tipo boolean, que se recebe o valor "true" , agrega a informação recebida no final do arquivo (si este arquivo existir). Se, em troca, recebe "false" como parâmetro, apaga o conteúdo atual do arquivo e o substitui com o segundo parâmetro.
- Finalmente a terceira função serve para buscar um ou mais valores dentro de um arquivo de uma cadeia de texto e substitui-los por uma série de valores dados.
Por exemplo, poderia ser usado deste modo:
String[] busca = {"NOME","SOBRENOME"};
String[] substituo = {"FERNANDO","ARTURI"};
FileManager fm = new FileManager();
String resultado = fm.replaceValues("D:\myFiles\prova.txt", busca, substituo);
A seguir o código da classe:
package notas;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileNotFoundException;
/**
* <p>Title: FileManager</p>
*
* <p>Description: Manejo de arquivos de texto</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* @author Fernando Arturi
* @version 1.0
*/
public class FileManager {
public void FileManager(){}
/**
* O metodo readFile le um arquivo de texto e retorna seu conteudo em
* formato de StringBuffer
* @param filename String
* @return StringBuffer
*/
public StringBuffer readFile(String filename){
StringBuffer sb = new StringBuffer();
try{
/**
* Aqui criamos um objeto File que representa o arquivo de texto que
* queremos ler
*/
File file = new File(filename);
/**
* Variavel temporaria que usaremos para ler cada uma das linhas do
* arquivo de texto
*/
String line = null;
/**
* BufferReader - Eh o encarregado de ler o arquivo de texto.
* O construtor recebe como parametro um objeto FileReader, que
* a s vez recebe o objeto File criado precedentemente.
*/
BufferedReader br = new BufferedReader(new FileReader(file));
/**
* Atraves deste ciclo o BufferReader le todo o arquivo, e vai acumulando (sb.append) em um StringBuffer
*/
while ((line = br.readLine()) != null) {
sb.append(line);
}
/**
* No final da leitura fechamos o objeto
*/
br.close();
} catch (FileNotFoundException fnfe){
/**
* Se damos um nome de arquivo que nao existe o sistema gera automaticamente um erro.
*/
System.out.println("Nao foi possivel encontrar o arquivo "+ filename);
}
catch (IOException ioe){
/**
* Foi produzido um erro durante a leitura do arquivo
*/
System.out.println("Foi produzido um erro durante a leitura do arquivo "+ filename);
}
return sb;
}
/**
* Este metodo permite, dada uma cadeia de caracteres determinada,
* salvar a mesma como um arquivo de texto, ou agrega-la a um arquivo ja existente
*
* @param filename String
* @param dataToWrite String
* @param append boolean
*/
public void saveFile(String filename, String dataToWrite, boolean append) {
try {
/**
* Criacao do objeto FileWriter dado um nome de arquivo determinado
* O segundo parametro (append) contem um valor booleano que
* indica se a informacao recebida deve ser agregada no final do
* arquivo ou, caso contrario, substituir a informacao ja
* existente.
*/
FileWriter fw = new FileWriter(filename, append);
/**
* Escritura da informacao no arquivo
*/
fw.write(dataToWrite);
/**
* fecha-se o arquivo
*/
fw.close();
} catch (IOException ioe) {
/**
* Foi produzido um erro durante a leitura/escritura do arquivo
*/
System.out.println(
"Foi produzido um erro durante a leitura do arquivo " + filename);
}
}
/**
* Esta funcao permite, dado um arquivo em particular, buscar dentro o mesmo
* determinados valores e muda-los por uma serie de novos valores dados,
* gerando um objeto de tipo String com o resultado
*
* @param path String
* @param valuesToSearch String[] Ejemplo {"NOME", "SOBRENOME"}
* @param valuesToReplace String[] Ejemplo {"Fernando Augusto", "Arturi"}
* @return String
*/
public String replaceValues (String path, String [] valuesToSearch, String [] valuesToReplace){
String line;
StringBuffer textComplete = new StringBuffer();
String tempText = "";
/**
* Leitura do arquivo de texto dado
*/
try {
BufferedReader br = new BufferedReader(new FileReader(path));
while ((line = br.readLine()) != null){
textComplete.append(line);
}
br.close();
} catch (FileNotFoundException fnfe){
/**
* Se damos um nome de arquivo que nao existe o sistema
* gera automaticamente um erro.
*/
System.out.println("Nao foi possivel encontrar o arquivo "+ filename);
}
catch (IOException ioe) {
/**
* foi produzido um erro durante a leitura/escritura do arquivo
*/
System.out.println(
"Foi produzido um erro durante a leitura do arquivo " + filename);
}
/**
* Uma vez completada a fase de leitura do arquivo, passamos a
* busca e substituicao dos valores dados.
* Para isto geramos um ciclo que percorremos tantas vezes como valores
* que tivermos que processar.
*/
for (int i=0; i<valuesToSearch.length; i++){
int position = textComplete.indexOf(valuesToSearch[i]);
if (position>0 ){
tempText = textComplete.substring(0,position);
/**
* busca e substituicao da cadeia.
*/
tempText = tempText + valuesToReplace[i] + textComplete.substring(position+valuesToSearch[i].length(),textComplete.length());
textComplete = new StringBuffer(tempText);
}
}
return tempText;
}
}