Você está lendo as linhas do arquivo via BufferedReader.readLine()? Um dos objetivos do BufferedReader é justamente processar quebras de linha, então o ideal é que você mesmo processe as quebras de linha interpretando os caracteres lidos. Assim, em vez de usar readLine(), você teria de usar read().
Legal, nunca pensei em usar o read(), só que olhei aki o read só recebe o valor como inteiro…
legal é tipo charcode? como eu faço para converter para texto depois?
[quote=kemperacc]Ja resolveu? posta ai o codigo com problema
Obrigado.[/quote]
Amigo, só não se assuste com o código, pois o objetivo deste programa é ficar lendo o arquivo de LOG o tempo todo…
Se ele encontrar determinadas palavras conforme os IF’s abaixo, ele armena no banco de dados…
Segue o código…
package packNFeLog;
import java.util.Date;
import java.util.Scanner;
import java.util.Vector;
import java.io.*;
import java.text.SimpleDateFormat;
import java.sql.*;
/**
* Programa com finalidade de analisar os LOG's do integrador e alimentar o arquivo NFEA01F
* @author alexandre.pestana
*
*/
public class NFeLog{
BufferedReader br;
String linha = "";
String comparar = "";
public String NameFile = "";
String chave = "";
String exception = "";
String erro = "";
String status = "";
public String driver400 = "";
public String url400 = "";
public String user400 = "";
public String pass400 = "";
boolean erro_detect = false;
Vector map_url = new Vector();
Vector map_unid = new Vector();
Vector map_user = new Vector();
Vector map_pass = new Vector();
public String diretorio = "";
Connection con;
ResultSet rs;
Statement st;
public NFeLog(Vector map_url_2,
Vector map_unid_2,
Vector map_user_2,
Vector map_pass_2,
String driver400_2,
String url400_2,
String user400_2,
String pass400_2,
String diretorio_2) throws FileNotFoundException{
//adicionando valores para classe mãe
driver400 = driver400_2;
url400 = url400_2;
user400 = user400_2;
pass400 = pass400_2;
map_url = map_url_2;
map_unid = map_unid_2;
map_user = map_user_2;
map_pass = map_pass_2;
diretorio = diretorio_2;
//MAPEANDO DIRETORIOS
int m = map_url.size();
for(int x=0; x < m ;x++){
String mapurl = (String) map_url.elementAt(x);
String mapunid = (String) map_unid.elementAt(x);
String mapuser = (String) map_user.elementAt(x);
String mappass = (String) map_pass.elementAt(x);
MapUnidRed(mapurl,mapunid,mapuser,mappass);
}
//Iniciando Excecução
run();
}
public void run(){
while (true) {
try{
//Verifica se o nome ainda é mesmo com a Data ATUAL
getDate();
//Efetua a leitura continua nas linhas.
if(br.readLine() != null){
linha = br.readLine();
}else{
linha = null;
}
if (linha != null){
//===========I D NF =============
int pid = linha.indexOf("Id........:");
if(pid > -1 ){
chave = linha.substring(pid+11,linha.length()).trim();
erro_detect = false; //IDENTIFICOU OUTRA NOTA
}
//====== PROCURANDO POR ERRO ==========
int perro = linha.indexOf("ERROR:");
if(perro > -1){
erro_detect = true;
}
/**
* SE ENCONTROU ALGUM ERRO ===========
*/
if(erro_detect){
int t = linha.length();
linha = linha.substring(0,t-2);
//STATUS E ERRO DA NOTA FÍSCAL
int psts = linha.indexOf("Status:");
if(psts > -1 ){
status = linha.substring(psts+7,linha.length()).trim();
erro = status.substring(6,status.length()).trim();
//Não pode ultrapassar 120 pos.
if(erro.length() > 120){
erro = erro.substring(0,120);
}
status = status.substring(0,3);
}
}
//ERRO INTERNAL EXCEPTION
int piex = linha.indexOf("Internal Exception:");
// System.out.println(linha);
if(piex > -1){
exception = linha.substring(piex+19,linha.length()).trim();
//ELIMINAR TEXTO JAVA.SQL.... (ECONOMIZAR ESPAÇO)
int filtroINI = exception.indexOf("java.");
int filtroFIM = exception.indexOf("Exception:");
if(filtroINI > -1){
String remover = exception.substring(filtroINI,filtroFIM+10);
exception = exception.replace(remover, "").trim();
}
if(exception.length() > 120){
exception = exception.substring(0,120);
}
}
//Atualizar NFEA01F - BPCS
if((erro != "") || (exception != "")){
// UpdateBPCS(chave,status,erro,exception);
}
//LIMPANDO VARIAVEIS
erro = "";
exception = "";
}else{
Thread.sleep(1000);
}
}catch(Exception e){
try{Thread.sleep(1000);}catch(Exception es){}
}
}
}
private void UpdateBPCS(String chave2, String status2, String erro2, String exception2) {
try{
Class.forName(driver400);
con = DriverManager.getConnection(url400,user400,pass400);
st = con.createStatement();
String sql = "SELECT A01TIP FROM GATESF.NFEA01F WHERE A01KEY='"+chave2+"'";
rs = st.executeQuery(sql);
if(rs.next()){
String A01TIP = (rs.getString("A01TIP")).trim();
if(!A01TIP.equals("S")){
//Prevalece o erro de Exception, se existir...
if(exception2 != "") erro2 = exception2;
//Data e Hora do Sistema
Date dataFinal = new Date();
SimpleDateFormat datahj = new SimpleDateFormat("yyyyMMdd") ;
String ydata = datahj.format(dataFinal);
SimpleDateFormat horahj = new SimpleDateFormat("HHmmss");
String yhora = horahj.format(dataFinal);
String sql2 = "UPDATE GATESF.NFEA01F SET A01STA="+status2+", A01DSC='"+erro2+"',A01DAT="+ydata+",A01TIP='I', A01HOR="+yhora+" WHERE A01KEY='"+chave2+"'";
st.executeUpdate(sql2);
}
}
con.close();
}catch(SQLException se ){
System.out.println(se);
}catch(Exception e){
System.out.println(e);
}
}
/*
* Método que verifica se o nome do arquivo ainda é o mesmo.
*/
private boolean getDate() {
if(!NameFile.equals(getFile())){
try{
//Armazendo nome do arquivo.
NameFile = getFile();
File dir = new File(diretorio);
if(dir.isDirectory()){
File arquivo = new File(diretorio+"/"+getFile());
//Limpando Buffer
br = null;
br = new BufferedReader(new FileReader(arquivo));
}else{
System.out.println("Diretorio nao localizado! ("+diretorio+")");
System.exit(0);
}
}catch(Exception e){
System.out.println(e);
}
}
return true;
}
/*
* Método que gera o nome do arquivo.
*/
public static String getFile(){
Date dataFinal = new Date();
SimpleDateFormat datahj = new SimpleDateFormat("yyyy-MM-dd") ;
String ydata = datahj.format(dataFinal);
return "IntegracaoTXT."+ydata+".log";
}
O método read() retorna -1 quando você já tiver lido TODOS os bytes contidos no arquivo. Então, é possível que você já tenha lido o caractere de interesse num momento anterior.