Olá gente;
Tenho a seguinte duvida, preciso importar uma arquivo .txt para Java. Até aí td bem…mas meu problema é que
preciso transformar agora esse arquivo depois de lido em uma classe DAO para inserir o texto em uma PROCEDURE.
Estou procurando pela NET se alguem já teve uma situação assim como exemplo, mas ainda não tive sucesso.
Eis a importação:
public static void main(String[] args) throws IOException {
try {
// FileReader para o arquivo:
FileReader fr = new FileReader("C:/Documents and Settings/arthur.gomes/Desktop/cliente.txt");
// BufferedReader para o FileReader:
BufferedReader br = new BufferedReader(fr);
String temp;
// A cada iteração, l~e uma linha do arquivo e atribui-a a temp:
while ((temp = br.readLine()) != null) {
// Aqui vc gera a sua "lista". No caso, imprimi cada linha na
// tela.
System.out.println(temp + "\n");
}
} catch (FileNotFoundException e1) {
System.out.println("File not found!");
}
}
}
[/code]
Até aqui td bem. Me imprime o texto no console. Mas agora…como transformo esse texto em uma classe DAO?
Então…eu tava lendo justamente esse link que vc me passou. Como não tenho experiência com “pattern DAO”,
to tentando entender. Na verdade é idéia é que uma Procedure leia o arquivo .txt…mas pelo que me passaram, eu preciso importar o arquivo antes…como aliás fiz. Depois formar uma classe DAO desse arquivo para poder chamar a Procedure.
Olá…fazendo uma correção…preciso importar o arquivo .txt e transformar em uma classe BEAN. Aí sim que farei a classe DAO.
Se alguem puder me ajudar…agradeço.
Aí que está…gostaria tbm de poder fazer do jeito mais simples…uma vez que conheço as informações no BEAN, mas a idéia é q importe o arquivo .txt…converta para uma classe Java (BEAN) e com essa classe farei o DAO no qual vou inserir as informações na devida PROCEDURE.
Li algo sobre importar arquivos txt e até já fiz os testes…mas e pra converter para uma classe Bean? Conhece algum tutorial?
[quote=arthurgon]Olá gente;
Tenho a seguinte duvida, preciso importar uma arquivo .txt para Java. Até aí td bem…mas meu problema é que
preciso transformar agora esse arquivo depois de lido em uma classe DAO
[/quote]
A coisa é ao contrário. Supondo que o texto contem dados de cliente então vc tem que criar objetos cliente, popular esses objetos com os dados do arquivo. Quando alguem consultar o DAO vc retorna esses objetos. algo assim
public class TxtFileClientDAO {
private String filePath; // "C:/Documents and Settings/arthur.gomes/Desktop/cliente.txt"
public synchronized Collection<Client> findAll(){
try {
Collection<Client> clients = new LinkedList<Client>();
FileReader fr = new FileReader(filePath);
// BufferedReader para o FileReader:
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
Client client = new Client();
// faz o parse da linha e seja valores , por exemplo se fosse separado por ;
String[] fields = line.split(";");
client.setName(fields[0]);
... // etc ..
clients.add(client);
}
} catch (FileNotFoundException e) {
throw new DAOException(e);
} catch (IOException e) {
throw new DAOException(e);
}
}
}
Voc pode bufferizar a lista ou seja, carrega apenas uma vez e manter na memoria. Se o arquivo muda esse tecnica é falha, mas pode usar algum tipo de file watcher para ser avisado que o arquivo mudor e recarregar conforme.
Cara eu to usando Java 1.4 por necessidade do projeto. A aplicação pede que eu converta para Java 5.
Como faço para corrigir os erros? Estão dando justamente em COLLECTION e nas tags do List.
Ficou assim o meu código…sendo MensagemVO como a classe Bean que criei. Pra ser honesto ainda não entrou na minha cabeça o conceito de importar um .txt ,criar objetos e popular com os dados do .txt. Esses objetos eu crio na mão como uma classe Bean. É isso? No meu caso a MensagemVO.
private String filePath; // "C:/Documents and Settings/arthur.gomes/Desktop/P2DAQ014.txt"
public synchronized Collection<MensagemVO> findAll(){
try {
Collection<MensagemVO> mensagens = new LinkedList<MensagemVO>();
FileReader fr = new FileReader(filePath);
// BufferedReader para o FileReader:
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
MensagemVO mensagem = new MensagemVO();
String[] fields = line.split(";");
//Justamente aqui que ficam minhas dúvidas,como populo esse objeto com os dados do .txt?
mensagem.setCod_msg(fields[0]);
mensagens.add(mensagem);
}
} catch (FileNotFoundException e) {
throw new Exception(e);
} catch (IOException e) {
throw new Exception(e);
}
}
} [/code]
[quote=arthurgon]Cara eu to usando Java 1.4 por necessidade do projeto. A aplicação pede que eu converta para Java 5.
Como faço para corrigir os erros? Estão dando justamente em COLLECTION e nas tags do List.
[/quote]
Se está usando 1.4 e não o 5, retire tudo o que estiver entre <> O 1.4 não tem generics.
Como popular o objeto com os dados ? Ora, vc tem que saber que dados estão no arquivo e em que formato ( ordem , etc…)
Ou seja, vc tem que conhecer o protocolo do arquivo. Ai vc lê e processa as informações para serem colocados no objeto
Se forem necessárias conversões ( para numeros ou datas) faça-as.
Exemplo de arquivo : 1 linha é um objeto
Maria Esteves;23042008;98;Olá, como está ?,true
João Limeira;12072008;98;Segundo cara,false
// processamento do arquivo
String[] fields = line.split(";");
MensagemVO mensagem = new MensagemVO();
SimpleDateFormat dformat = new SimpleDateFormat("ddMMyyyy");
mensagem.setNome(fields[0]) // 0 porque é a primeira coluna
Date envio = dformt.parse(fields[1]); // segunda coluna
mensagem.setEnvio(envio )
int prioridade = Integer.parseInt(fields[2]); // segunda coluna
mensagem.setPrioridade(prioridade) ;
mensagem.setTexto(fields[3]) ;
mensagem.setExterno(fields[4]).equals("true") ;
É a primeira vez que faço esse tipo de trabalho. É como andar de patins…depois que aprende não esquece mais.
A dificuldade é só na primeira aplicação…mas vou conseguir.
Dai amigo admiro teu esforço, pelo que vejo você esta meio confuso realmente em algumas coisas. Não sem quem falou que você precisava dessa proc para o projeto, mas isso não é necessário cara você deverá criar um padrão para o arquivo, pois tu não esta trabalhando com ontologia, portanto vais ter que dizer que o teu .txt esta com o formato X por exemplo, depois de estabelecer este formato tens que fazer o teu programa algo como o sergio postou pra você, lógico que isto depende do conteúdo que você vai ter no teu .txt se cada campo vai ser separado por “;” ou qualquer outro caracter para que tu possa identificar o que é o nome do cliente, idade, código etc.
Dai você me diz - Paulo a questão é que a minha proc já esta pronta com o inser montado, mesmo que isto já esteja pronto você vai precisar que o arquivo .txt esteja com um padrão se não a proc não vai saber quem é quem, tipo (nome cliente, idade, código etc)
Quando tu tiveres o padrão para o txt poderás criar o Bean.
Por exemplo.
Vai ter que ter no txt as seguintes informações:
Código do Cliente
Nome do Cliente
Idade
Sexo
A partir disso vai criar o teu bean:
Algo como.
class BeanCliente {
private Integer codigoCliente;
private String nomeCliente
private Integer idade;
private Char sexo;
// aqui vais os geters e seters dos respectivos atributos.
}
Depois de ter o teu bean e o teu txt padronizado deverás criar o teu programa para ler o teu txt algo como o exemplo que o nosso amigo Sérgio postou.
O teu DAO servira para criar o método incluir por exemplo.
Da uma lida no blog do amigo Sérgio que paticularmente achei muito bom, já que ele não fez a propaganda eu faço hehe.
Ainda não deu certo. Estou tendo um erro acredito eu de formatação do texto.
Segue o erro:
java.lang.NumberFormatException: For input string: "CAMPO"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:468)
at java.lang.Integer.parseInt(Integer.java:518)
at testes.MensagemDAO.main(MensagemDAO.java:25)
Exception in thread "main"
public static void main(String[] args) throws Exception,SQLException {
try {
FileReader fr = new FileReader("C:/Documents and Settings/arthur.gomes/Desktop/P2DAQ014.txt");
// BufferedReader para o FileReader:
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
MensagemVO vo = new MensagemVO();
String[] fields = line.split(";");
int cod_msg = Integer.parseInt(fields[0]);
vo.setCod_msg(cod_msg);
vo.setDescr_msg(fields[1]);
int cod_emp = Integer.parseInt(fields[2]);
vo.setCod_emp(cod_emp);
int cod_fil = Integer.parseInt(fields[3]);
vo.setCod_fil(cod_fil);
int cod_tiplis = Integer.parseInt(fields[4]);
vo.setCod_tiplis(cod_tiplis);
vo.setTs_tiplis(fields[5]);
//mensagens.add(vo);
System.out.println(line + "\n");
}
} catch (FileNotFoundException e) {
throw new Exception(e);
} catch (IOException e) {
throw new Exception(e);
}
}
}
[/code]
Será que alguem poderia me ajudar? Aliás…nesse caso…como faço para inserir todos esses objetos numa lista? To usando Java 1.4(Exigencia da aplicação).
Valeu gente.
Para o seu caso, o JFileHelpers cai como uma luva. Você teria apenas que anotar a classe MensagemVO, dizendo que você vai usar registros delimitados e depois mapear os campos.
Algo como o exemplo do JFileHelpers:
@DelimitedRecord(",")
public class Customer {
private Integer custId;
private String name;
private Integer rating;
@FieldConverter(converter = ConverterKind.Date, format = "dd-MM-yyyy")
private Date addedDate;
@Override
public String toString() {
String l = System.getProperty("line.separator");
StringBuffer b = new StringBuffer();
b.append("Customer: ").append(l);
b.append(" custId = " + custId).append(l);
b.append(" name = " + name).append(l);
b.append(" rating = " + rating).append(l);
b.append(" addedDate = " + addedDate).append(l);
return StringHelper.toStringBuilder(this, b.toString());
}
}
Depois é só fazer:
public static void main(String[] args) throws IOException {
FileHelperEngine<Customer> engine = new FileHelperEngine<Customer>(Customer.class);
List<Customer> customers = new ArrayList<Customer>();
if (args.length < 1) {
customers = engine.readResource("/samples/customers-delimited.txt");
}
else {
customers = engine.readFile(args[0]);
}
for (Customer c : customers) {
System.out.println(c);
}
}